aboutsummaryrefslogtreecommitdiffstats
path: root/vid-automation/src/test/java/org/onap/vid/api
diff options
context:
space:
mode:
authorAmichai Hemli <ah0398@intl.att.com>2019-03-18 10:07:02 +0000
committerGerrit Code Review <gerrit@onap.org>2019-03-18 10:07:02 +0000
commita036637a4d466662128cde1823816578e76c69e0 (patch)
treed58add45a75701717e67de676463fc6b15068f9d /vid-automation/src/test/java/org/onap/vid/api
parent756a9c041981e05a3f5bd740ebc0d3fc22579003 (diff)
parent66af8b9b391879be78660d6ccb0a1f1f9340b423 (diff)
Merge "Merge automation from ECOMP's repository"
Diffstat (limited to 'vid-automation/src/test/java/org/onap/vid/api')
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/AaiApiTest.java270
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/AsyncInfraApiTest.java177
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest.java532
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest2.java211
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest3.java645
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationApiTest.java431
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/BaseApiAaiTest.java2
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/BaseApiTest.java203
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/BaseMsoApiTest.java78
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/CategoryParametersApiTest.java1
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/ChangeManagementApiTest.java135
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/OperationalEnvironmentControllerApiTest.java2
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/ProbeApiTest.java209
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/SampleApiTest.java3
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java88
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/ServiceInstanceMsoApiTest.java51
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/ServicePermissionsApiTest.java63
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/ServiceTreeApiTest.java370
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/TestUtils.java81
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/VersionControllerApiTest.java26
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/VidConfigurationApiTest.java1
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/pProbeAaiApiTest.java21
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/pProbeMsoApiTest.java42
23 files changed, 2630 insertions, 1012 deletions
diff --git a/vid-automation/src/test/java/org/onap/vid/api/AaiApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/AaiApiTest.java
index 7d558940d..952aa522d 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/AaiApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/AaiApiTest.java
@@ -1,12 +1,33 @@
package org.onap.vid.api;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet.ofL3Network;
+import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet.ofServiceInstance;
+import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet.ofVlanTag;
+import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet.ofVnf;
+import static org.onap.simulator.presetGenerator.presets.ecompportal_att.EcompPortalPresetsUtils.getEcompPortalPresets;
+import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND;
+import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
+import static vid.automation.test.utils.TestHelper.GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS;
+
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.URISyntaxException;
+import java.util.UUID;
import net.javacrumbs.jsonunit.JsonAssert;
+import net.javacrumbs.jsonunit.core.Configuration;
+import net.javacrumbs.jsonunit.core.Option;
import org.apache.commons.text.StringEscapeUtils;
-import org.codehaus.jackson.map.ObjectMapper;
import org.onap.simulator.presetGenerator.presets.aai.PresetAAIBadBodyForGetServicesGet;
import org.onap.simulator.presetGenerator.presets.aai.PresetAAICloudRegionAndSourceFromConfigurationPut;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetHomingForVfModule;
import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetInstanceGroupsByCloudRegion;
import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest;
import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing;
@@ -17,6 +38,9 @@ import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetPortMirroringS
import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetPortMirroringSourcePortsError;
import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetRelatedInstanceGroupsByVnfId;
import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet;
+import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
+import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
import org.onap.vid.model.aai.AaiResponse;
import org.onap.vid.model.mso.OperationalEnvironmentList;
import org.onap.vid.more.LoggerFormatTest;
@@ -29,31 +53,23 @@ import org.springframework.web.client.HttpServerErrorException;
import org.springframework.web.util.UriComponentsBuilder;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
+import vid.automation.test.infra.FeatureTogglingTest;
+import vid.automation.test.infra.Features;
import vid.automation.test.services.SimulatorApi;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.net.URISyntaxException;
-
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.*;
-import static org.onap.simulator.presetGenerator.presets.ecompportal_att.EcompPortalPresetsUtils.getEcompPortalPresets;
-import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND;
-import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
+import vid.automation.test.utils.TestHelper;
public class AaiApiTest extends BaseApiAaiTest {
-
+ private static final String AAI_HOMING_DATA_RESPONSE = "viewEdit/aaiHomingDataResponse.json";
public static final String GET_OPERATIONAL_ENVIRONMENTS_JSON = "get_operational_environments_aai.json";
public static final String GET_OPERATIONAL_ENVIRONMENTS_JSON_ERROR = "get_operational_environments_aai_error.json";
- public static final String[] AAI_GET_SERVICES_ERROR_SIMULATOR_RESPONSES = {"getServicesAaiErrorResp.json", "aai_get_full_subscribers.json"};
- public static final String[] AAI_GET_SERVICES_FINE_SIMULATOR_RESPONSES = {"getServicesAaiFineResp.json", "aai_get_full_subscribers.json"};
-
+ public static final String[] AAI_GET_SERVICES_ERROR_SIMULATOR_RESPONSES = {"getServicesAaiErrorResp.json", "create_new_instance/aai_get_full_subscribers.json"};
+ public static final String[] AAI_GET_SERVICES_FINE_SIMULATOR_RESPONSES = {"getServicesAaiFineResp.json", "create_new_instance/aai_get_full_subscribers.json"};
+ public static final String AAI_VNFS_FOR_CHANGE_MANAGEMENT_JSON = "changeManagement/get_vnf_data_by_globalid_and_service_type.json";
public static final String OPERATIONAL_ENVIRONMENT_TYPE = "VNF";
public static final String OPERATIONAL_ENVIRONMENT_STATUS = "Activate";
- public static final String BASE_GET_SERVICES_AAI_REQUEST_BODY = "{\"start\" : \"service-design-and-creation/models\", \"query\" : \"query/serviceModels-byDistributionStatus?distributionStatus=DISTRIBUTION_COMPLETE_OK\";}";
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";
- 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\":\"HngwProtectedOam.OAM\",\"network-technology\":\"Contrail\",\"is-bound-to-vpn\":false,\"resource-version\":\"1521662814627\",\"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\":\"HngwProtectedOam.OAM\",\"network-technology\":\"Contrail\",\"is-bound-to-vpn\":false,\"resource-version\":\"1521662816043\",\"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\":\"HngwProtectedOam.OAM\",\"network-technology\":\"Contrail\",\"is-bound-to-vpn\":false,\"resource-version\":\"1521662815304\",\"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";
+ 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";
public static final String GET_AAI_SERVIES_EXPECTED_RESULT = "{\n" +
" \"services\": [{\n" +
" \"uuid\": \"20c4431c-246d-11e7-93ae-92361f002671\",\n" +
@@ -202,8 +218,6 @@ public class AaiApiTest extends BaseApiAaiTest {
" \"readOnly\": false\n" +
"}";
- static final ObjectMapper om = new ObjectMapper();
-
private String getGetOperationEnvironmentsUri() {
return uri.toASCIIString() + "/get_operational_environments";
}
@@ -262,18 +276,9 @@ public class AaiApiTest extends BaseApiAaiTest {
assertEquals(1, list.getOperationalEnvironment().get(0).getRelationshipList().getRelationship().size());
}
-
- @Test
- public void testVoid(){
- SimulatorApi.registerExpectation(SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET,
- "add_subinterface/aai_get_tenants.json"
- , "add_subinterface/aai_get_services.json"
- );
- }
-
-
@Test(dataProvider = "errorCodes")
public void getServicesWitErrorResponse(int errorCode) throws IOException, URISyntaxException {
+ TestHelper.resetAaiCache(GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS, restTemplate, uri);
final String expectedResult = "{\"services\":[],\"readOnly\":false}";
callAaiWithSimulatedErrorResponse(AAI_GET_SERVICES_ERROR_SIMULATOR_RESPONSES,
@@ -284,11 +289,25 @@ public class AaiApiTest extends BaseApiAaiTest {
@Test
public void getServicesFineRequest() throws IOException, URISyntaxException {
-
+ TestHelper.resetAaiCache(GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS, restTemplate, uri);
callAaiWithSimulatedErrorResponse(AAI_GET_SERVICES_FINE_SIMULATOR_RESPONSES,
ImmutableMap.of(),
getAaiServicesUri(), "", 200, GET_AAI_SERVIES_EXPECTED_RESULT, HttpMethod.GET);
+ }
+ @Test
+ public void whenGetServicesErrorResponse_badResponseIsNotCached() throws IOException, URISyntaxException {
+ TestHelper.resetAaiCache(GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS, restTemplate, uri);
+
+
+ final String expectedErrorResult = "{\"services\":[],\"readOnly\":false}";
+ //call AAI with bad response by clear exceptions from simulator, bad response shall not be cached
+ callAaiWithSimulatedErrorResponse(new String[]{}, ImmutableMap.of(), getAaiServicesUri(), "", 200, expectedErrorResult, HttpMethod.GET);
+
+ //call AAI with fine response
+ callAaiWithSimulatedErrorResponse(AAI_GET_SERVICES_FINE_SIMULATOR_RESPONSES,
+ ImmutableMap.of(),
+ getAaiServicesUri(), "", 200, GET_AAI_SERVIES_EXPECTED_RESULT, HttpMethod.GET);
}
@DataProvider
@@ -305,7 +324,7 @@ public class AaiApiTest extends BaseApiAaiTest {
SimulatorApi.registerExpectationFromPresets(getEcompPortalPresets(), APPEND);
SimulatorApi.registerExpectationFromPreset(new PresetAAIGetSubscribersGet(), APPEND);
- restTemplateErrorAgnostic.getForEntity(uri + "/aai_get_services",String.class);
+ restTemplateErrorAgnostic.getForEntity(uri + "/aai_get_services", String.class);
String logLines = LoggerFormatTest.getLogLines("error", 15, 0, restTemplate, uri);
assertThat("not found in error log", logLines, containsString("Failed to parse aai response"));
@@ -425,12 +444,13 @@ public class AaiApiTest extends BaseApiAaiTest {
assertResponse(GET_NETWORK_COLLECTION_EXPECTED_RESPONSE, response);
}
+
@Test
public void getNetworkCollectionDetailsByServiceInstanceId_given404ErrorAaiResponse_yield200OkWithErrorMsg() {
SimulatorApi.clearAll();
try {
restTemplate.getForObject(uri + "/aai_get_network_collection_details/" + "SOME-RANDOM-UUID", String.class);
- }catch (HttpClientErrorException e){
+ } catch (HttpClientErrorException e) {
assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
}
}
@@ -442,7 +462,7 @@ public class AaiApiTest extends BaseApiAaiTest {
SimulatorApi.registerExpectationFromPreset(presetAAIGetNetworkCollectionDetails, CLEAR_THEN_SET);
try {
restTemplate.getForObject(uri + "/aai_get_network_collection_details/" + "SOME-RANDOM-UUID", String.class);
- }catch (HttpServerErrorException e){
+ } catch (HttpServerErrorException e) {
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, e.getStatusCode());
}
}
@@ -450,9 +470,9 @@ public class AaiApiTest extends BaseApiAaiTest {
@Test
public void getGetInstanceGroupsByCloudRegion_yieldValidResponse() {
SimulatorApi.clearAll();
- final PresetAAIGetInstanceGroupsByCloudRegion presetAAIGetInstanceGroupsByCloudRegion = new PresetAAIGetInstanceGroupsByCloudRegion("CLOUD-OWNER", "CLOUD-REGION-ID", "NETWORK-FUNCTION");
+ final PresetAAIGetInstanceGroupsByCloudRegion presetAAIGetInstanceGroupsByCloudRegion = new PresetAAIGetInstanceGroupsByCloudRegion("CLOUD%20OWNER", "CLOUD-REGION-ID", "NETWORK%20FUNCTION");
SimulatorApi.registerExpectationFromPreset(presetAAIGetInstanceGroupsByCloudRegion, CLEAR_THEN_SET);
- final String response = restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" +"NETWORK-FUNCTION", String.class);
+ final String response = restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD OWNER" + "/" + "CLOUD-REGION-ID" + "/" + "NETWORK FUNCTION", String.class);
assertResponse(GET_INSTANCE_GROUPS_BY_CLOUDREGION_EXPECTED_RESPONSE, response);
}
@@ -462,16 +482,17 @@ public class AaiApiTest extends BaseApiAaiTest {
SimulatorApi.clearAll();
final PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest presetAAIGetInstanceGroupsByCloudRegion = new PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest("CLOUD-OWNER", "CLOUD-REGION-ID", "NETWORK-FUNCTION");
SimulatorApi.registerExpectationFromPreset(presetAAIGetInstanceGroupsByCloudRegion, CLEAR_THEN_SET);
- final String response = restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" +"NETWORK-FUNCTION", String.class);
+ final String response = restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" + "NETWORK-FUNCTION", String.class);
assertResponse(GET_INSTANCE_GROUPS_BY_CLOUDREGION_EXPECTED_RESPONSE, response);
}
+
@Test
public void getGetInstanceGroupsByCloudRegion_given404ErrorAaiResponse_yield200OkWithErrorMsg() {
SimulatorApi.clearAll();
try {
- restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" +"NETWORK-FUNCTION", String.class);
- }catch (HttpClientErrorException e){
+ restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" + "NETWORK-FUNCTION", String.class);
+ } catch (HttpClientErrorException e) {
assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
}
}
@@ -482,8 +503,8 @@ public class AaiApiTest extends BaseApiAaiTest {
final PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing presetAAIGetInstanceGroupsByCloudRegion = new PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing("CLOUD-OWNER", "CLOUD-REGION-ID", "NETWORK-FUNCTION");
SimulatorApi.registerExpectationFromPreset(presetAAIGetInstanceGroupsByCloudRegion, CLEAR_THEN_SET);
try {
- restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" +"NETWORK-FUNCTION", String.class);
- }catch (HttpServerErrorException e){
+ restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" + "NETWORK-FUNCTION", String.class);
+ } catch (HttpServerErrorException e) {
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, e.getStatusCode());
}
}
@@ -510,18 +531,28 @@ public class AaiApiTest extends BaseApiAaiTest {
final PresetAAIGetRelatedInstanceGroupsByVnfId getRelatedInstanceGroupsByVnfId = new PresetAAIGetRelatedInstanceGroupsByVnfId(vnfId);
SimulatorApi.registerExpectationFromPreset(getRelatedInstanceGroupsByVnfId, CLEAR_THEN_SET);
- final String response = restTemplate.getForObject(uri + "/aai_get_instance_groups_by_vnf_instance_id/" + vnfId, String.class);
+ final String response = restTemplate.getForObject(uri + "/aai_get_instance_groups_by_vnf_instance_id/" + vnfId,
+ String.class);
assertResponse("[{\"type\":\"instance-group\",\"name\":\"instance group name\"},{\"type\":\"instance-group\",\"name\":\"instance group name\"}]", response);
}
@Test
+ public void getHomingDataForVfModule(){
+ String vnfId= "0846287b-65bf-45a6-88f6-6a1af4149fac", vfModuleId= "a9b70ac0-5917-4203-a308-0e6920e6d09b";
+ SimulatorApi.registerExpectationFromPreset(new PresetAAIGetHomingForVfModule(vnfId,vfModuleId), CLEAR_THEN_SET);
+ final String response = restTemplate.getForObject(uri + "/aai_get_homing_by_vfmodule/"+ vnfId +"/"+vfModuleId, String.class);
+ String exectedResponse = TestUtils.convertRequest(objectMapper, AAI_HOMING_DATA_RESPONSE);
+ assertResponse(exectedResponse,response);
+ }
+
+ @Test
public void getGetRelatedInstanceGroupsByVnfId__yield404NotFound() {
final PresetAAIGetRelatedInstanceGroupsByVnfId getRelatedInstanceGroupsByVnfId = new PresetAAIGetRelatedInstanceGroupsByVnfId("abcd");
SimulatorApi.registerExpectationFromPreset(getRelatedInstanceGroupsByVnfId, CLEAR_THEN_SET);
try {
restTemplate.getForObject(uri + "/aai_get_instance_groups_by_vnf_instance_id/" + "dcba", String.class);
- } catch (HttpClientErrorException e){
+ } catch (HttpClientErrorException e) {
assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
}
@@ -547,9 +578,162 @@ public class AaiApiTest extends BaseApiAaiTest {
assertResponse(expected, response);
}
+ @Test
+ @FeatureTogglingTest(Features.FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS)
+ public void networksToVlans_simpleRequest_responseIsCorrect() {
+ // Prepare randomized values
+ // Some of these random values are persisted to match with the
+ // cypress preset "aaiGetNetworksToVlansByServiceInstance.json".
+ String globalCustomerId = UUID.randomUUID().toString();
+ String sdcModelUuid = "5a3ad576-c01d-4bed-8194-0e72b4a3d020";
+ String serviceType = "vMOG";
+ int vlanIdOuter = 34612;
+ int vlanIdOuter2 = 8568012;
+ int vlanIdOuter3 = 4;
+
+ // build hierarchical presets:
+ //
+ // service instance
+ // ║
+ // ╠═ network 1
+ // ║ ╠═ vlan 1
+ // ║ ╚═ vlan 2
+ // ║
+ // ╠═ network 2
+ // ║ ╚═ vlan 3
+ // ║
+ PresetAAIStandardQueryGet vlanTagPreset1 = ofVlanTag(vlanIdOuter);
+ PresetAAIStandardQueryGet vlanTagPreset2 = ofVlanTag(vlanIdOuter2);
+ PresetAAIStandardQueryGet vlanTagPreset3 = ofVlanTag(vlanIdOuter3);
+
+ PresetAAIStandardQueryGet l3NetworkPreset1 = ofL3Network("7989a6d2-ba10-4a5d-8f15-4520bc833090", "DDDEEEFFF", "Provider Network",
+ ImmutableMultimap.of("vlan-tag", vlanTagPreset1.getReqPath(), "vlan-tag", vlanTagPreset2.getReqPath()), "Failed");
+ PresetAAIStandardQueryGet l3NetworkPreset2 = ofL3Network("e8e2332e-1f84-4237-bc97-3b5b842f52e4","GGGHHHIII", "Network",
+ ImmutableMultimap.of("vlan-tag", vlanTagPreset3.getReqPath()), "Assigned");
+
+ PresetAAIStandardQueryGet serviceInstance = ofServiceInstance("9cdd1b2a-43a7-47bc-a88e-759ba2399f0b",
+ "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "6e59c5de-f052-46fa-aa7e-2fca9d674c44", globalCustomerId, serviceType,
+ ImmutableMultimap.of("l3-network", l3NetworkPreset1.getReqPath(), "l3-network", l3NetworkPreset2.getReqPath()));
+
+ SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
+ serviceInstance, l3NetworkPreset1, l3NetworkPreset2, vlanTagPreset1, vlanTagPreset2, vlanTagPreset3,
+ new PresetSDCGetServiceMetadataGet(sdcModelUuid, UUID.randomUUID().toString(), "service-vl-with-5g-network-provider-alacarte.zip"),
+ new PresetSDCGetServiceToscaModelGet(sdcModelUuid, "service-vl-with-5g-network-provider-alacarte.zip")
+ ), CLEAR_THEN_SET);
+
+ // THE TEST
+ final String response = restTemplate.getForObject(uri + "/aai/standardQuery/vlansByNetworks"
+ + "?serviceInstanceId=" + serviceInstance.getInstanceId()
+ + "&serviceType=" + serviceType
+ + "&globalCustomerId=" + globalCustomerId
+ + "&sdcModelUuid=" + sdcModelUuid
+ , String.class);
+
+ assertResponse(JsonAssert.when(Option.IGNORING_ARRAY_ORDER),
+ getResourceAsString("serviceWithNetwork/aaiGetNetworksToVlansByServiceInstance.json"),
+ response);
+ }
+
+ @Test
+ @FeatureTogglingTest(Features.FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS)
+ public void networksWithVlansToVnf_simpleRequest_responseIsCorrect() {
+ // Prepare randomized values
+ // Some of these random values are persisted to match with the
+ // cypress preset "aaiGetNetworksWithVlansToVnfByServiceInstance.json".
+ String globalCustomerId = UUID.randomUUID().toString();
+ String sdcModelUuid = "5a3ad576-c01d-4bed-8194-0e72b4a3d020";
+ String serviceType = "vMOG";
+ int vlanIdOuter = 34123;
+ int vlanIdOuter2 = 65540;
+ int vlanIdOuter3 = 12345;
+ int vlanIdOuter4 = 67890;
+ int vlanIdOuter5 = 417695;
+ int vlanIdOuter6 = 783243;
+
+ // build hierarchical presets:
+ //
+ // service instance
+ // ║
+ // ╠═ vnf 1
+ // ║ ╚═ network 1
+ // ║ ╠═ vlan 1
+ // ║ ╚═ vlan 2
+ // ║ ╚═ network 2
+ // ║ ╠═ vlan 3
+ // ║ ╚═ vlan 4
+ // ║
+ // ╠═ vnf 2
+ // ║ ╚═ network 3
+ // ║ ╠═ vlan 5
+ // ║ ╚═ vlan 6
+ // ║
+ PresetAAIStandardQueryGet vlanTagPreset1 = ofVlanTag(vlanIdOuter);
+ PresetAAIStandardQueryGet vlanTagPreset2 = ofVlanTag(vlanIdOuter2);
+ PresetAAIStandardQueryGet vlanTagPreset3 = ofVlanTag(vlanIdOuter3);
+ PresetAAIStandardQueryGet vlanTagPreset4 = ofVlanTag(vlanIdOuter4);
+ PresetAAIStandardQueryGet vlanTagPreset5 = ofVlanTag(vlanIdOuter5);
+ PresetAAIStandardQueryGet vlanTagPreset6 = ofVlanTag(vlanIdOuter6);
+
+ PresetAAIStandardQueryGet l3NetworkPreset1 = ofL3Network("36517f3d-2bc2-48f5-aaf8-418520c54330","AAAAABBBBCCCC", "Provider Network",
+ ImmutableMultimap.of("vlan-tag", vlanTagPreset1.getReqPath(), "vlan-tag", vlanTagPreset2.getReqPath()), "Assigned");
+
+ PresetAAIStandardQueryGet l3NetworkPreset2 = ofL3Network("12347f3d-2bc2-48f5-aaf8-418520c54330","DDDEEEE", "Provider Network",
+ ImmutableMultimap.of("vlan-tag", vlanTagPreset3.getReqPath(), "vlan-tag", vlanTagPreset4.getReqPath()), "Created");
+
+ PresetAAIStandardQueryGet vnfPreset1 = ofVnf("c015cc0f-0f37-4488-aabf-53795fd93cd3",
+ ImmutableMultimap.of("l3-network", l3NetworkPreset1.getReqPath() , "l3-network", l3NetworkPreset2.getReqPath()));
+
+ PresetAAIStandardQueryGet l3NetworkPreset3 = ofL3Network("12aa7f3d-2bc2-48f5-aaf8-418520c54330","XXXYYYZZZ", "Network",
+ ImmutableMultimap.of("vlan-tag", vlanTagPreset5.getReqPath(), "vlan-tag", vlanTagPreset6.getReqPath()), "Created");
+
+ PresetAAIStandardQueryGet vnfPreset2 = ofVnf("c55da606-cf38-42c7-bc3c-be8e23b19299", ImmutableMultimap.of("l3-network", l3NetworkPreset3.getReqPath()));
+
+ PresetAAIStandardQueryGet serviceInstance = ofServiceInstance("9cdd1b2a-43a7-47bc-a88e-759ba2399f0b",
+ "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "6e59c5de-f052-46fa-aa7e-2fca9d674c44", globalCustomerId, serviceType,
+ ImmutableMultimap.of("generic-vnf", vnfPreset1.getReqPath(), "generic-vnf", vnfPreset2.getReqPath()));
+
+ SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
+ serviceInstance, vnfPreset1, vnfPreset2, l3NetworkPreset1, l3NetworkPreset2, l3NetworkPreset3, vlanTagPreset1, vlanTagPreset2, vlanTagPreset3, vlanTagPreset4, vlanTagPreset5, vlanTagPreset6,
+ new PresetSDCGetServiceMetadataGet(sdcModelUuid, UUID.randomUUID().toString(), "service-vl-with-5g-network-provider-alacarte.zip"),
+ new PresetSDCGetServiceToscaModelGet(sdcModelUuid, "service-vl-with-5g-network-provider-alacarte.zip")
+ ), CLEAR_THEN_SET);
+
+ // THE TEST
+ final String response = restTemplate.getForObject(uri + "/aai/standardQuery/vlansByNetworks"
+ + "?serviceInstanceId=" + serviceInstance.getInstanceId()
+ + "&serviceType=" + serviceType
+ + "&globalCustomerId=" + globalCustomerId
+ + "&sdcModelUuid=" + sdcModelUuid
+ , String.class);
+
+ assertResponse(JsonAssert.when(Option.IGNORING_ARRAY_ORDER),
+ getResourceAsString("serviceWithNetwork/aaiGetNetworksWithVlansToVnfByServiceInstance.json"),
+ response);
+ }
+
+ @Test
+ public void getVnfDataByGlobalIdAndServiceType() {
+
+ SimulatorApi.registerExpectation(AAI_VNFS_FOR_CHANGE_MANAGEMENT_JSON, APPEND);
+
+ String url = uri + "/get_vnf_data_by_globalid_and_service_type/a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb/vFlowLogic";
+
+ ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
+//reduced_vnf_data_by_globalid_and_service_type.json
+ assertTrue(false == response.getBody().contains("generic-vfmodule"));
+ assertResponse(JsonAssert.when(Option.IGNORING_ARRAY_ORDER),
+ getResourceAsString("changeManagement/reduced_vnf_data_by_globalid_and_service_type.json"),
+ response.getBody());
+
+ }
+
private void assertResponse(Object expected, String response) {
+ assertResponse(Configuration.empty(), expected, response);
+ }
+
+ private void assertResponse(Configuration configuration, Object expected, String response) {
try {
- JsonAssert.assertJsonEquals(expected, response);
+ JsonAssert.assertJsonEquals(expected, response, configuration);
} catch (Exception | AssertionError e) {
System.err.println("response was: " + response);
throw e;
diff --git a/vid-automation/src/test/java/org/onap/vid/api/AsyncInfraApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/AsyncInfraApiTest.java
index 5f83f36dc..058cb2f5b 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/AsyncInfraApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/AsyncInfraApiTest.java
@@ -1,205 +1,30 @@
package org.onap.vid.api;
import com.google.common.collect.ImmutableList;
-import com.google.gson.JsonObject;
-import net.codestory.http.WebServer;
import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
import org.onap.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet;
import org.onap.vid.more.LoggerFormatTest;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
-import org.testng.Assert;
import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import vid.automation.test.infra.Features;
-import vid.automation.test.infra.Wait;
-import vid.automation.test.model.JobBulk;
-import vid.automation.test.model.JobModel;
import vid.automation.test.services.SimulatorApi;
-import java.net.Inet4Address;
-import java.net.InetAddress;
-import java.net.NetworkInterface;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.List;
import java.util.UUID;
-import java.util.concurrent.ConcurrentSkipListSet;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.*;
+import static org.hamcrest.Matchers.containsString;
import static org.testng.AssertJUnit.assertEquals;
public class AsyncInfraApiTest extends BaseApiTest {
- private static final String PENDING = "PENDING";
public static final String API_URL = "asyncForTests";
- private boolean asyncJobsIsOn() {
- return Features.FLAG_ASYNC_JOBS.isActive()
- && Features.FLAG_ASYNC_INSTANTIATION.isActive();
- }
-
@BeforeClass
public void login() {
super.login();
}
- @BeforeMethod
- protected void deleteAllPendingJobs() {
- System.out.println("Connecting database...");
-
- try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
- System.out.println("Database connected!");
- try (Statement stmt = connection.createStatement()) {
- stmt.addBatch("DELETE from `vid_service_info`");
- stmt.addBatch("DELETE FROM `vid_job`");
-
- int[] executeBatch = stmt.executeBatch();
- }
-
- } catch (SQLException e) {
- throw new IllegalStateException("Cannot connect the database!", e);
- }
- }
-
-
- @Test
- public void createBulkOfJobsViaApi_thenGetEachOneOfThem() {
- int jobCount = 10;
- final String url = "http://localhost:1234/testMe";
- ResponseEntity<JobBulk> result = postJobBulk(jobCount, url, "NoOp");
- assertEquals(HttpStatus.OK, result.getStatusCode());
- Assert.assertNotNull(result.getBody());
- assertEquals(jobCount, getJobChildren(result).size());
-
-
- result.getBody().getJobs().forEach(job -> {
- assertThat(job.getUuid(), not(isEmptyOrNullString()));
- assertEquals(PENDING, job.getStatus());
- });
-
- result.getBody().getJobs().forEach(job -> {
- ResponseEntity<JobModel> jobResult = restTemplate.getForEntity(buildUri(API_URL+"/job/{uuid}"), JobModel.class, job.getUuid());
- assertEquals(job.getUuid(), jobResult.getBody().getUuid());
- //assertEquals(PENDING, jobResult.getBody().getStatus());
- });
- }
-
- private List<JobModel> getJobChildren(ResponseEntity<JobBulk> result) {
- return result.getBody().getJobs().stream().filter(job -> job.getTemplateId() != null).collect(Collectors.toList());
- }
-
- private ResponseEntity<JobBulk> postJobBulk(int jobCount, String url, String type) {
- JsonObject jsonObject = new JsonObject();
- jsonObject.addProperty("name", "service-"+random.nextInt());
- jsonObject.addProperty("count", jobCount);
- jsonObject.addProperty("url", url);
- jsonObject.addProperty("type", type);
- ResponseEntity<JobBulk> result = restTemplate.postForEntity(buildUri(API_URL), jsonObject.toString(), JobBulk.class);
- return result;
- }
-
- @Test
- public void addFewJobs_verifyCallbacksAreAllAndNoDuplicates() throws InterruptedException {
- final Collection<String> expected = new ConcurrentSkipListSet<>();
- final Collection<String> results = new ConcurrentSkipListSet<>();
- final Collection<String> duplicates = new ConcurrentSkipListSet<>();
- final String targetPath = "/my-mso";
-
- // https://github.com/CodeStory/fluent-http
- final WebServer server = new WebServer().configure(routes -> routes
- .post(targetPath, (context) -> {
- final String body = context.extract(String.class);
- if (!results.add(body)) {
- duplicates.add(body);
- }
- return body;
- })
- ).startOnRandomPort();
-
- final int jobCount = 10;
- final int childCount = 2;
-
- InetAddress inetAddress = getExternalInetAddress();
-
- final String returnUrl = "http://" + inetAddress.getHostAddress() + ":" + server.port() + targetPath;
- System.out.println(returnUrl);
-
- // POST jobs
- IntStream.range(0, jobCount).parallel().forEach(i -> {
- ResponseEntity<JobBulk> result = postJobBulk(childCount, returnUrl, "HttpCall");
- getJobChildren(result).forEach(child -> {
- expected.add(child.getUuid());
- });
- });
- Wait.waitFor((actual -> actual.size() == expected.size()), results, 75, 200, TimeUnit.MILLISECONDS);
- // wait some another time give change for duplications
- TimeUnit.SECONDS.sleep(5);
-
- if (asyncJobsIsOn()) {
- assertThat("async jobs is on: should callback for all jobs - no more, no less", results, equalTo(expected));
- assertThat("async jobs is on: should callback for exactly number of jobs", results, hasSize(jobCount * childCount));
- assertThat("async jobs is on: should have no duplicate jobs callback", duplicates, empty());
- } else {
- assertThat("async jobs is off: should not callback for any job", results, empty());
- assertThat("async jobs is off: should have no duplicate jobs callback", duplicates, empty());
- }
-
- server.stop();
-
- }
-
- private InetAddress getExternalInetAddress() {
- // https://stackoverflow.com/questions/9481865/getting-the-ip-address-of-the-current-machine-using-java
- InetAddress candidateAddress = null;
- try {
- for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements(); ) {
- NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
-
- if (iface.getName().contains("docker")) {
- // ignore local docker virtual gateway IPs
- continue;
- }
-
- // Iterate all IP addresses assigned to each card...
- for (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); ) {
- InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();
-
- // take only non-loopback, ipv4 addresses
- if (!inetAddr.isLoopbackAddress() && inetAddr instanceof Inet4Address) {
-
- System.out.println("inetAddr (" + iface.getName() + "): " + inetAddr);
- if (inetAddr.isSiteLocalAddress()) {
- // Found non-loopback site-local address. Return it immediately...
- System.out.println("inetAddr, site-local (" + iface.getName() + "): " + inetAddr);
- candidateAddress = inetAddr;
- }
- else if (candidateAddress == null) {
- // Found non-loopback address, but not necessarily site-local.
- // Store it as a candidate to be returned if site-local address is not subsequently found...
- candidateAddress = inetAddr;
- // Note that we don't repeatedly assign non-loopback non-site-local addresses as candidates,
- // only the first. For subsequent iterations, candidate will be non-null.
- }
- }
- }
-
- }
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- return candidateAddress;
- }
-
@Test
public void testGetStatusBadRequest() {
ResponseEntity<String> jobResult = getJob("1234");
diff --git a/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest.java
new file mode 100644
index 000000000..539e857c9
--- /dev/null
+++ b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest.java
@@ -0,0 +1,532 @@
+package org.onap.vid.api;
+
+import static java.util.Collections.emptyMap;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
+import static org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset.DEFAULT_INSTANCE_ID;
+import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
+import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet.COMPLETE;
+import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.SERVICE_NAME;
+import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset;
+import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember.InstanceGroupMemberAction;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseDelete;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateNetworkALaCarteCypress;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteServiceCypress;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVfModuleALaCarteCypress;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteCypress2;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfGroup;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteALaCarteService;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteInstanceGroup;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames;
+import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
+import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
+import org.onap.vid.model.asyncInstantiation.JobAuditStatus;
+import org.onap.vid.model.asyncInstantiation.JobAuditStatus.SourceStatus;
+import org.onap.vid.model.asyncInstantiation.ServiceInfo;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import vid.automation.test.Constants;
+import vid.automation.test.infra.FeatureTogglingTest;
+import vid.automation.test.infra.Features;
+import vid.automation.test.model.JobStatus;
+import vid.automation.test.model.ServiceAction;
+import vid.automation.test.services.AsyncJobsService;
+import vid.automation.test.services.SimulatorApi;
+import vid.automation.test.services.SimulatorApi.RegistrationStrategy;
+
+@FeatureTogglingTest({Features.FLAG_ASYNC_JOBS, Features.FLAG_ASYNC_INSTANTIATION, Features.FLAG_ASYNC_ALACARTE_VNF})
+public class AsyncInstantiationALaCarteApiTest extends AsyncInstantiationBase {
+
+ private static final String CREATE_BULK_OF_ALACARTE_REQUEST = "asyncInstantiation/vidRequestCreateALaCarte.json";
+ private static final String CREATE_BULK_OF_ALACARTE_REQUEST_CYPRESS = "a-la-carte/redux-a-la-carte.json";
+ private static final String CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS = "a-la-carte/redux-a-la-carte-no-testapi.json";
+ private static final String DELETE_BULK_OF_ALACARTE_REQUEST = "VnfGroup/ServiceWithVnfGroupsDeleteRequest.json";
+ private static final String VIEW_EDIT_VNF_GROUPS_REQUEST = "VnfGroup/VnfGroupCreate1Delete1None1Request.json";
+ private static final String DELETE_TWO_VNF_GROUPS_MEMBER_AND_ADD_ONE_REQUEST = "VnfGroup/vnfGroupCreate1VnfGroupAndDelete2VnfGroupsRequest.json";
+ private static final String DELETE_SERVICE_WITH_TWO_VNF_GROUPS_REQUEST_WITH_GROUPMEMBERS = "VnfGroup/deleteServiceWith2VnfGroupsRequest_AndThreeGroupMembers.json";
+
+
+ private static final String SERVICE_INSTANCE_ID = BaseMSOPreset.DEFAULT_INSTANCE_ID;
+ private static final String MSO_COMPLETE_STATUS = "COMPLETE";
+ private static final String MSO_FAILED_STATUS = "FAILED";
+
+
+ @DataProvider
+ public static Object[][] scenarios() {
+ return new Object[][]{
+ {Scenario.PARALLEL},
+ {Scenario.COMPLETED},
+// {Scenario.NAME_TAKEN}, Not relevant because the name uniqueness is supported only for bulk in Macro
+// {Scenario.DUPLICATE_NAME}, Not relevant because name duplication is not handled in A La Carte
+ {Scenario.IN_PROGRESS},
+ {Scenario.MSO_FAIL}
+ };
+ }
+
+ @AfterMethod
+ protected void dropAllFromNameCounter() {
+ AsyncJobsService asyncJobsService = new AsyncJobsService();
+ asyncJobsService.dropAllFromNameCounter();
+ }
+
+ @Test
+ public void deploy1Service0VnfWithStrictSimulatorCompare__verifyStatusAndAudit() {
+ /*
+ Legit Preset || deploy 1 Service, no VNF inside
+ -> JobStatus is Eventually success, audit
+ is adequate; strict simulator compare
+ */
+
+ final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "calazixide85");
+ List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService(names, 0, DEFAULT_REQUEST_ID));
+ List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(new PresetMSOOrchestrationRequestGet());
+ List<BasePreset> presets = getPresets(createPresets, inProgressPresets);
+
+ registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
+ final List<String> uuids = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_REQUEST);
+
+ assertThat(uuids, hasSize(1));
+ final String jobId = uuids.get(0);
+
+ assertServiceInfoSpecific1(jobId, JobStatus.COMPLETED, names.get(SERVICE_NAME));
+ assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), msoAuditStatusesCompleted(jobId));
+ }
+
+ @Test
+ public void deleteServiceWithTwoVnfGroups_andRetry() {
+ String parentServiceInstanceId = "service-instance-id";
+ String firstVnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
+ String secondVnfGroupToDeleteInstanceId = "VNF_GROUP2_INSTANCE_ID";
+ String firstVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
+ String secondVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
+ String parentServiceRequestId = UUID.randomUUID().toString();
+ List<String> vnfGroupMemberRemoveRequestsIds = ImmutableList.of(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString());
+
+ //failed to delete vnf group, and then also service is not deleted
+ List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
+ new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(0), InstanceGroupMemberAction.Remove),
+ new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(1), InstanceGroupMemberAction.Remove),
+ new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF3_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(2), InstanceGroupMemberAction.Remove));
+
+ List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
+ new PresetMSODeleteInstanceGroup(firstVnfGroupToDeleteRequestId, firstVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
+ new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId())
+ );
+
+ List<PresetMSOOrchestrationRequestGet> inProgressPresets = new ArrayList<>();
+ inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, firstVnfGroupToDeleteRequestId));
+ inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_FAILED_STATUS, secondVnfGroupToDeleteRequestId));
+ inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(0)));
+ inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(1)));
+ inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(2)));
+
+ List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
+ registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
+ final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_SERVICE_WITH_TWO_VNF_GROUPS_REQUEST_WITH_GROUPMEMBERS);
+
+ assertThat(uuids, hasSize(1));
+ final String jobId = uuids.get(0);
+ assertServiceInfoSpecificDeletion(jobId, JobStatus.COMPLETED_WITH_ERRORS, "SERVICE_INSTANCE_NAME", "service-instance-type");
+ assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
+ TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(deletePresets.get(1).getReqPath(), 1L),
+
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 3L)
+
+ ));
+
+ //retry to delete vnf-group and then delete service
+ List<BasePreset> retryPresets = ImmutableList.of(
+ new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
+ new PresetMSODeleteALaCarteService(parentServiceRequestId,parentServiceInstanceId ),
+ new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, secondVnfGroupToDeleteRequestId),
+ new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, parentServiceRequestId));
+ registerExpectationFromPresets(retryPresets, RegistrationStrategy.CLEAR_THEN_SET);
+
+ List<String> retryUuids = retryJob(jobId);
+ assertThat(retryUuids, hasSize(1));
+ final String retryJobId = retryUuids.get(0);
+ assertServiceInfoSpecificDeletion(retryJobId, JobStatus.COMPLETED, "SERVICE_INSTANCE_NAME", "service-instance-type");
+
+ assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
+ TestUtils.hasOrLacksOfEntry(retryPresets.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(retryPresets.get(1).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(retryPresets.get(2).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(retryPresets.get(3).getReqPath(), 1L)
+ ));
+ }
+
+ @DataProvider
+ public static Object[][] msoRequestStatusDataProvider() {
+ return new Object[][]{
+ {MSO_COMPLETE_STATUS, JobStatus.COMPLETED},
+ {MSO_FAILED_STATUS, JobStatus.FAILED}
+ };
+ }
+
+ @Test(dataProvider = "msoRequestStatusDataProvider")
+ public void deleteServiceWithStrictSimulatorCompare__verifyStatusAndAudit(String msoStatus, JobStatus expectedStatus) {
+ List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(new PresetMSODeleteALaCarteService( DEFAULT_REQUEST_ID, SERVICE_INSTANCE_ID));
+ List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of (new PresetMSOOrchestrationRequestGet(msoStatus),
+ new PresetMSOOrchestrationRequestGet(msoStatus));
+ List<BasePreset> presets = getDeletePresets(deletePresets, inProgressPresets);
+
+ registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
+ final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_BULK_OF_ALACARTE_REQUEST);
+
+ assertThat(uuids, hasSize(1));
+ final String jobId = uuids.get(0);
+
+ assertServiceInfoSpecificDeletion(jobId, expectedStatus, "wowServiceWithVnfGroping", "TYLER SILVIA");
+ switch (expectedStatus) {
+ case COMPLETED:
+ assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), msoAuditStatusesCompleted(jobId));
+ break;
+
+ case FAILED:
+ assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null);
+ break;
+ }
+
+ assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
+ TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L)
+ ));
+ }
+
+ @Test(dataProvider = "msoRequestStatusDataProvider")
+ public void deleteTwoGroupsAddOneGroup(String msoStatus, JobStatus expectedStatus) {
+ String parentServiceInstanceId = "service-instance-id";
+ String firstVnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
+ String secondVnfGroupToDeleteInstanceId = "VNF_GROUP2_INSTANCE_ID";
+ String firstVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
+ String secondVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
+ String vnfGroupToCreateRequestId = UUID.randomUUID().toString();
+
+ List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
+ new PresetMSODeleteInstanceGroup(firstVnfGroupToDeleteRequestId, firstVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
+ new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()));
+
+ List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
+ new PresetMSOCreateVnfGroup("VNF_GROUP3_INSTANCE_NAME", vnfGroupToCreateRequestId,
+ PresetMSOCreateVnfGroup.MODEL_INFO_0, parentServiceInstanceId, false));
+ List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
+ new PresetMSOOrchestrationRequestGet(msoStatus, firstVnfGroupToDeleteRequestId),
+ new PresetMSOOrchestrationRequestGet(msoStatus, secondVnfGroupToDeleteRequestId),
+ new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupToCreateRequestId, "Instance group was created successfully.")
+ );
+ List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
+ registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
+ final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_TWO_VNF_GROUPS_MEMBER_AND_ADD_ONE_REQUEST);
+
+ assertThat(uuids, hasSize(1));
+ final String jobId = uuids.get(0);
+
+ assertServiceInfoSpecificUpdate(jobId, expectedStatus, "SERVICE_INSTANCE_NAME");
+ assertExpectedStatus(expectedStatus, jobId);
+ assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
+ TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(deletePresets.get(1).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(2).getReqPath(), 1L)
+ ));
+
+ }
+
+ @Test
+ public void viewEditVnfGroup__verifyStatusAndAudit() {
+ String parentServiceInstanceId = "service-instance-id";
+ String vnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
+
+ //failed to create vnf group, failed to remove 1 member (and then also vnf group isn't deleted)
+ viewEditVnfGroup_registerPresets(parentServiceInstanceId, vnfGroupToDeleteInstanceId, MSO_FAILED_STATUS);
+
+ final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), VIEW_EDIT_VNF_GROUPS_REQUEST);
+
+ assertThat(uuids, hasSize(1));
+ final String jobId = uuids.get(0);
+
+ assertServiceInfoSpecificUpdate(jobId, JobStatus.COMPLETED_WITH_ERRORS, "SERVICE_INSTANCE_NAME");
+ assertExpectedStatus(JobStatus.COMPLETED_WITH_ERRORS, jobId);
+ Map<String, Long> recordedRequest = SimulatorApi.retrieveRecordedRequestsPathCounter();
+ assertThat(recordedRequest, allOf(
+ TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId, 0L), //delete vnf group
+ TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups", 1L), //create vnf group
+ TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId + "/removeMembers", 3L) //remove vnf group members
+ ));
+
+ //retry - vnf group create, 1 member remove, vnf group delete
+ viewEditVnfGroup_registerPresets(parentServiceInstanceId, vnfGroupToDeleteInstanceId, MSO_COMPLETE_STATUS);
+ final List<String> retryUuids = retryJob(jobId);
+ assertThat(retryUuids, hasSize(1));
+ final String retryJobId = retryUuids.get(0);
+
+ assertServiceInfoSpecificUpdate(retryJobId, JobStatus.COMPLETED, "SERVICE_INSTANCE_NAME");
+ assertExpectedStatus(JobStatus.COMPLETED, retryJobId);
+ assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
+ TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId, 1L), //delete vnf group
+ TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups", 1L), //create vnf group
+ TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId + "/removeMembers", 1L) //remove vnf group members
+ ));
+ }
+
+ private void viewEditVnfGroup_registerPresets(String parentServiceInstanceId, String vnfGroupToDeleteInstanceId, String msoStatus) {
+ String vnfGroupToDeleteRequestId = UUID.randomUUID().toString();
+ String vnfGroupToCreateRequestId = UUID.randomUUID().toString();
+ List<String> vnfGroupMemberRemoveRequestsIds = ImmutableList.of(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString());
+
+ List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
+ new PresetMSODeleteInstanceGroup(vnfGroupToDeleteRequestId, vnfGroupToDeleteInstanceId, getUserCredentials().getUserId()));
+ List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
+ new PresetMSOCreateVnfGroup("VNF_GROUP3_INSTANCE_NAME", vnfGroupToCreateRequestId,
+ PresetMSOCreateVnfGroup.MODEL_INFO_0, parentServiceInstanceId, false),
+ new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(0), InstanceGroupMemberAction.Remove),
+ new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(1), InstanceGroupMemberAction.Remove),
+ new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF3_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(2), InstanceGroupMemberAction.Remove));
+ List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
+ new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupToDeleteRequestId), // delete instance group
+ new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupToCreateRequestId, "Instance group was created successfully."), // create instance group
+ new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(0)), // remove instance group member
+ new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupMemberRemoveRequestsIds.get(1)), // remove instance group member
+ new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(2))); // remove instance group member
+
+ List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
+ registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
+ }
+
+ private void assertExpectedStatus(JobStatus expectedStatus, String jobId) {
+ switch (expectedStatus) {
+ case COMPLETED:
+ assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), null);
+ break;
+
+ case FAILED:
+ assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null);
+ break;
+ }
+ }
+
+ @Test
+ public void deploy1Service1FailedVnf__verifyStatus_andRetry() {
+ //CreateServiceWithFailedVnf is common for API test and UI test,
+ //so if you change it, make sure both test are compatible with your changes
+ CreateServiceWithFailedVnf createServiceWithFailedVnf = new CreateServiceWithFailedVnf(this);
+ createServiceWithFailedVnf.deployService1FailedVnf();
+ createServiceWithFailedVnf.secondRegistration();
+ createServiceWithFailedVnf.retryJob();
+ createServiceWithFailedVnf.retryAssertion();
+ createServiceWithFailedVnf.simulatorCallsAssertion();
+ }
+
+ @DataProvider
+ Object[][] data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls() {
+ return Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ? new Object[][]{
+ {"none", emptyMap(), emptyMap(), true},
+ {"none", emptyMap(), emptyMap(), false},
+ {"instance", ImmutableMap.of("vnfs", 0L, "networks", 0L, "vfModules", 0L, "volumeGroups", 0L),
+ ImmutableMap.of("serviceInstances", 1L, "vnfs", 1L, "networks", 1L, "vfModules", 3L, "volumeGroups", 1L),true},
+ {"network", emptyMap(),
+ ImmutableMap.of("networks", 1L), true},
+ {"vnf0", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L),
+ ImmutableMap.of("vnfs", 1L, "vfModules", 3L, "volumeGroups", 1L), true},
+ {"vfModule0", ImmutableMap.of("vfModules", 1L, "volumeGroups", 0L),
+ ImmutableMap.of("vfModules", 3L, "volumeGroups", 1L), true},
+ {"volumeGroup", ImmutableMap.of("vfModules", 2L),
+ ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L), true},
+ {"vfModule1", emptyMap(),
+ ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L), true},
+ {"vfModule2", emptyMap(),
+ ImmutableMap.of("vfModules", 1L), true}
+ } : new Object[][]{
+ {"none", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L), emptyMap(), true}
+ };
+ }
+
+ @Test(dataProvider = "data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls")
+ public void deploy1ServiceFromCypress__verifyStatusAndMsoCalls_andRetry(String whatToFail, Map<String, Long> pathCounterOverride, Map<String, Long> retryPathCounterOverride, boolean withTestApi) {
+ final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "serviceInstanceName");
+ String vnfRequestId = UUID.randomUUID().toString();
+ registerPresetsForRetryTest(whatToFail, names, vnfRequestId, withTestApi);
+
+ final List<String> uuids = createBulkOfInstances(false, 1, names, withTestApi? CREATE_BULK_OF_ALACARTE_REQUEST_CYPRESS: CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS);
+
+ assertThat(uuids, hasSize(1));
+ final String jobId = uuids.get(0);
+
+ JobStatus finalJobStatus;
+ switch (whatToFail) {
+ case "none": finalJobStatus = JobStatus.COMPLETED; break;
+ case "instance": finalJobStatus = JobStatus.FAILED; break;
+ default: finalJobStatus = JobStatus.COMPLETED_WITH_ERRORS; break;
+ }
+ assertServiceInfoSpecific2(jobId, finalJobStatus, names.get(SERVICE_NAME));
+ assertRecordedRequests(pathCounterOverride, 1L, vnfRequestId);
+
+ if (!"none".equals(whatToFail)) {
+ registerPresetsForRetryTest("none", names, vnfRequestId, withTestApi);
+
+ List<String> retryUuids = retryJob(jobId);
+ assertThat(retryUuids, hasSize(1));
+ final String retryJobId = retryUuids.get(0);
+
+ ServiceAction serviceAction = "instance".equals(whatToFail) ? ServiceAction.INSTANTIATE : ServiceAction.UPDATE;
+ assertServiceInfoSpecific2(retryJobId, JobStatus.COMPLETED, names.get(SERVICE_NAME), serviceAction);
+
+ assertRecordedRequests(retryPathCounterOverride, 0L, vnfRequestId);
+ }
+ }
+
+ private void registerPresetsForRetryTest(String whatToFail, ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names, String vnfRequestId, boolean withTestApi ) {
+ String networkRequestId = UUID.randomUUID().toString();
+ String vfModule0RequestId = UUID.randomUUID().toString();
+ String vfModule1RequestId = UUID.randomUUID().toString();
+ String vfModule2RequestId = UUID.randomUUID().toString();
+ String volumeGroupRequestId = UUID.randomUUID().toString();
+ List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
+ new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteServiceCypress(names, 0, DEFAULT_REQUEST_ID, Constants.GR_API, withTestApi),
+ new PresetMSOCreateVnfALaCarteCypress2(vnfRequestId, DEFAULT_INSTANCE_ID, vnfRequestId, "2017-488_PASQUALE-vPE", Constants.GR_API, withTestApi),
+ new PresetMSOCreateNetworkALaCarteCypress(networkRequestId, DEFAULT_INSTANCE_ID, networkRequestId, "ExtVL", Constants.GR_API, withTestApi)
+ );
+ List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
+ new PresetMSOOrchestrationRequestGet("instance".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE),
+ new PresetMSOOrchestrationRequestGet("vnf0".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vnfRequestId),
+ new PresetMSOOrchestrationRequestGet("vfModule0".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule0RequestId),
+ new PresetMSOOrchestrationRequestGet("vfModule1".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule1RequestId),
+ new PresetMSOOrchestrationRequestGet("vfModule2".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule2RequestId),
+ new PresetMSOOrchestrationRequestGet("volumeGroup".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, volumeGroupRequestId),
+ new PresetMSOOrchestrationRequestGet("network".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, networkRequestId)
+ );
+ List<BasePreset> presetsWithoutVfModule = getPresets(createPresets, inProgressPresets);
+
+ ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>()
+ .addAll(presetsWithoutVfModule)
+ .add(new PresetSDCGetServiceToscaModelGet("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "csar-noDynamicFields-ecompNamingFalse-fullModelDetails.zip"))
+ .add(new PresetSDCGetServiceMetadataGet("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", "csar-noDynamicFields-ecompNamingFalse-fullModelDetails.zip"))
+ .add(new PresetMSOCreateVfModuleALaCarteCypress(vfModule0RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, PresetMSOCreateVfModuleALaCarteCypress.module0Names, Constants.GR_API, withTestApi))
+ .add(PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress.forVolumeGroup(volumeGroupRequestId, DEFAULT_INSTANCE_ID, vnfRequestId, Constants.GR_API, withTestApi))
+ .add(PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress.forVfModule(vfModule1RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, volumeGroupRequestId, Constants.GR_API, withTestApi))
+ .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_JUST_ANOTHER_REGION_TO_ATT_AIC)
+ .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC)
+ .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MY_REGION_TO_ATT_AIC)
+ .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_LCP_REGION_TEXT_TO_ATT_AIC)
+ .add(new PresetMSOCreateVfModuleALaCarteCypress(vfModule2RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, PresetMSOCreateVfModuleALaCarteCypress.module2Names, Constants.GR_API, withTestApi))
+ .build();
+
+ registerExpectationFromPresets(
+ Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ? presets : presetsWithoutVfModule,
+ RegistrationStrategy.CLEAR_THEN_SET);
+ }
+
+ private void assertRecordedRequests(Map<String, Long> pathCounterOverride, Long defaultValue, String vnfRequestId) {
+ Long vfModulesDefaultValue = defaultValue == 1L ? 3L : 0L;
+
+ //noinspection unchecked
+ assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
+ TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances",
+ pathCounterOverride.getOrDefault("serviceInstances", defaultValue)),
+
+ TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/networks",
+ pathCounterOverride.getOrDefault("networks", defaultValue)),
+
+ TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs",
+ pathCounterOverride.getOrDefault("vnfs", defaultValue)),
+
+ TestUtils.hasOrLacksOfEntry("/mso/serviceInstances/v./" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/volumeGroups",
+ pathCounterOverride.getOrDefault("volumeGroups", defaultValue)),
+
+ TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/vfModules",
+ pathCounterOverride.getOrDefault("vfModules", vfModulesDefaultValue))
+ ));
+ }
+
+ private ImmutableList<JobAuditStatus> vidAuditStatusesCompleted(String jobId) {
+ return ImmutableList.of(
+ vidAuditStatus(jobId, "PENDING", false),
+ vidAuditStatus(jobId, "IN_PROGRESS", false),
+ vidAuditStatus(jobId, "COMPLETED", true)
+ );
+ }
+
+ private ImmutableList<JobAuditStatus> msoAuditStatusesCompleted(String jobId ) {
+ return ImmutableList.of(
+ msoAuditStatus(jobId, "REQUESTED", null, UUID.fromString(DEFAULT_REQUEST_ID)),
+ msoAuditStatus(jobId, MSO_COMPLETE_STATUS, "Service Instance was created successfully.", UUID.fromString(DEFAULT_REQUEST_ID))
+ );
+ }
+
+ private JobAuditStatus msoAuditStatus(String jobId, String jobStatus, String additionalInfo, UUID requestId) {
+ return new JobAuditStatus(UUID.fromString(jobId), jobStatus, SourceStatus.MSO, requestId, additionalInfo, false);
+ }
+
+ private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName) {
+ assertServiceInfoSpecific2(jobId, jobStatus, serviceInstanceName, ServiceAction.INSTANTIATE);
+ }
+
+ private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName, ServiceAction serviceAction) {
+ assertExpectedStatusAndServiceInfo(jobStatus, jobId, true, new ServiceInfo(
+ "us16807000", jobStatus, false,
+ "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
+ "JAG1", null,
+ "092eb9e8e4b7412e8787dd091bc58e86", null,
+ "JANET25", null,
+ "TYLER SILVIA", null,
+ null, serviceInstanceName,
+ "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "action-data", "1.0",
+ jobId, null, serviceAction, false)
+ );
+ }
+
+ private void assertServiceInfoSpecificDeletion(String jobId, JobStatus jobStatus, String serviceInstanceName, String serviceType) {
+ assertExpectedStatusAndServiceInfo(jobStatus, jobId, true, new ServiceInfo(
+ "us16807000", jobStatus, false,
+ null, null, null,
+ null, null,
+ null, null,
+ null, null,
+ serviceType, null,
+ null, serviceInstanceName,
+ "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
+ jobId, null, ServiceAction.DELETE, false)
+ );
+ }
+
+ private void assertServiceInfoSpecificUpdate(String jobId, JobStatus jobStatus, String serviceInstanceName) {
+ assertExpectedStatusAndServiceInfo(jobStatus, jobId, true, new ServiceInfo(
+ "us16807000", jobStatus, false,
+ null, null, null,
+ null, null,
+ null, null,
+ null, null,
+ "service-instance-type", null,
+ "service-instance-id", serviceInstanceName,
+ "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
+ jobId, null, ServiceAction.UPDATE, false)
+ );
+ }
+
+ enum Scenario {
+ PARALLEL, COMPLETED, NAME_TAKEN, DUPLICATE_NAME, IN_PROGRESS, MSO_FAIL
+ }
+
+}
diff --git a/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest2.java b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest2.java
new file mode 100644
index 000000000..54f2cc66f
--- /dev/null
+++ b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest2.java
@@ -0,0 +1,211 @@
+package org.onap.vid.api;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
+import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
+import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.SERVICE_NAME;
+import static vid.automation.test.services.SimulatorApi.registerExpectationFromPreset;
+import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset;
+import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
+import org.onap.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseDelete;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2ErrorResponse;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteALaCarteService;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGetErrorResponse;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestsGetByRequestId;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestsGetByServiceInstanceId;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames;
+import org.onap.vid.model.asyncInstantiation.JobAuditStatus;
+import org.onap.vid.model.asyncInstantiation.JobAuditStatus.SourceStatus;
+import org.onap.vid.model.asyncInstantiation.ServiceInfo;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import vid.automation.test.infra.FeatureTogglingTest;
+import vid.automation.test.infra.Features;
+import vid.automation.test.model.JobStatus;
+import vid.automation.test.model.ServiceAction;
+import vid.automation.test.services.AsyncJobsService;
+import vid.automation.test.services.SimulatorApi;
+import vid.automation.test.services.SimulatorApi.RegistrationStrategy;
+
+@FeatureTogglingTest({Features.FLAG_ASYNC_JOBS, Features.FLAG_ASYNC_INSTANTIATION, Features.FLAG_ASYNC_ALACARTE_VNF})
+public class AsyncInstantiationALaCarteApiTest2 extends AsyncInstantiationBase {
+
+ private static final String CREATE_BULK_OF_ALACARTE_MULTIPLE_VNF_NETWORK_REQUEST_CYPRESS = "a-la-carte/redux-multiple-vnf-network.json";
+ private static final String DELETE_BULK_OF_ALACARTE_REQUEST = "VnfGroup/ServiceWithVnfGroupsDeleteRequest.json";
+ private static final String SERVICE_INSTANCE_ID = BaseMSOPreset.DEFAULT_INSTANCE_ID;
+
+
+ @DataProvider
+ public static Object[][] scenarios() {
+ return new Object[][]{
+ {Scenario.PARALLEL},
+ {Scenario.COMPLETED},
+// {Scenario.NAME_TAKEN}, Not relevant because the name uniqueness is supported only for bulk in Macro
+// {Scenario.DUPLICATE_NAME}, Not relevant because name duplication is not handled in A La Carte
+ {Scenario.IN_PROGRESS},
+ {Scenario.MSO_FAIL}
+ };
+ }
+
+ @AfterMethod
+ protected void dropAllFromNameCounter() {
+ AsyncJobsService asyncJobsService = new AsyncJobsService();
+ asyncJobsService.dropAllFromNameCounter();
+ }
+
+ @Test
+ public void deleteService_withBadResponseFromMso_verifyStatus() {
+ List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(new PresetMSODeleteALaCarteService( DEFAULT_REQUEST_ID, SERVICE_INSTANCE_ID, 500));
+ List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(new PresetMSOOrchestrationRequestGet());
+ List<BasePreset> presets = getDeletePresets(deletePresets, inProgressPresets);
+
+ registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
+ final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_BULK_OF_ALACARTE_REQUEST);
+
+ assertThat(uuids, hasSize(1));
+ final String jobId = uuids.get(0);
+
+ assertServiceInfoSpecificDeletion(jobId, JobStatus.FAILED, "wowServiceWithVnfGroping", "TYLER SILVIA");
+ assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
+ TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 0L)
+ ));
+ }
+
+
+ @Test
+ public void instantiationFailedForService(){
+ CreateInstanceWithFailedService createInstanceWithFailedService = new CreateInstanceWithFailedService(this);
+ createInstanceWithFailedService.deployServiceFailedInstance();
+ }
+
+ @Test
+ void getBulkForRetry_notFoundException(){
+ CreateServiceWithFailedVnf createServiceWithFailedVnf = new CreateServiceWithFailedVnf(this);
+ createServiceWithFailedVnf.getBulkForRetryNotFound();
+ }
+
+
+ @Test
+ public void deploy1Service1FailedVnf_EditJobSendingSameDataAndRetry_verifyNewJobWithSameData() {
+ CreateServiceWithFailedVnf createServiceWithFailedVnf = new CreateServiceWithFailedVnf(this);
+ String bulkRetryPayload = createServiceWithFailedVnf.deployService1FailedVnf();
+ createServiceWithFailedVnf.assertResourceAuditStatus(bulkRetryPayload);
+ createServiceWithFailedVnf.secondRegistration();
+ createServiceWithFailedVnf.retryJobWithOtherDataAndAssert(bulkRetryPayload);
+ }
+
+ @Test
+ public void deploy1Service1FailedVnf_EditSomeDetailsAndRetry_verifyNewJobWithEditedData() {
+ CreateServiceWithFailedVnf createServiceWithFailedVnf = new CreateServiceWithFailedVnf(this);
+ String originalBulkForRetry = createServiceWithFailedVnf.deployService1FailedVnf();
+ createServiceWithFailedVnf.assertResourceAuditStatus(originalBulkForRetry);
+ String changedData = createServiceWithFailedVnf.changeSomeDataAndRegisterToSimulator(originalBulkForRetry);
+ createServiceWithFailedVnf.retryJobWithOtherDataAndAssert(changedData);
+ }
+
+ private List<JobAuditStatus> getExpectedAuditFromFile(String fileName) throws IOException {
+ String content = TestUtils.convertRequest(objectMapper, fileName);
+ List<JobAuditStatus> auditStatusList = ImmutableList.copyOf(objectMapper.readValue(content, JobAuditStatus[].class));
+ return auditStatusList;
+
+
+ }
+
+ @Test
+ public void getAuditInfoForALaCarteByServiceInstanceId() throws IOException {
+ final String expectedMsoAuditInfo = "a-la-carte/auditInfoMSOALaCarte.json";
+ registerExpectationFromPreset(
+ new PresetMSOOrchestrationRequestsGetByServiceInstanceId(),
+ RegistrationStrategy.CLEAR_THEN_SET);
+ List<JobAuditStatus> actualMsoAudits = getJobMsoAuditStatusForAlaCarte(UUID.randomUUID().toString(), "aa1234d1-5a33-55df-13ab-12abad84e333", "bc305d54-75b4-431b-adb2-eb6b9e546014");
+ List<JobAuditStatus> expectedMsoAudits = getExpectedAuditFromFile(expectedMsoAuditInfo);
+ assertThat(actualMsoAudits, is(expectedMsoAudits));
+
+ }
+
+ @Test
+ public void getAuditInfoForALaCarteByRequestId() {
+ registerExpectationFromPreset(
+ new PresetMSOOrchestrationRequestsGetByRequestId(),
+ RegistrationStrategy.CLEAR_THEN_SET);
+ final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "serviceInstanceName");
+ String uuid = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_MULTIPLE_VNF_NETWORK_REQUEST_CYPRESS).get(0);
+ List<JobAuditStatus> actualMsoAudits = getJobMsoAuditStatusForAlaCarte( uuid, "405652f4-ceb3-4a75-9474-8aea71480a77", null);
+ List<JobAuditStatus> expectedMsoAudits = ImmutableList.of(
+ new JobAuditStatus("serviceInstanceName", "FAILED", UUID.fromString("405652f4-ceb3-4a75-9474-8aea71480a77"),"Service Instance was failed.",false, "service"));
+ assertThat(actualMsoAudits, is(expectedMsoAudits));
+
+ }
+
+ @Test
+ public void getAuditInfoForALaCarteByJobId() throws IOException {
+ SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
+ new PresetMSOCreateServiceInstanceGen2ErrorResponse(),
+ new PresetGetSessionSlotCheckIntervalGet(),
+ new PresetAAIGetSubscribersGet()
+ ),
+ RegistrationStrategy.CLEAR_THEN_SET);
+ final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "serviceInstanceName");
+ String uuid = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_MULTIPLE_VNF_NETWORK_REQUEST_CYPRESS).get(0);
+
+ assertAndRetryIfNeeded(() -> {
+ final List<JobAuditStatus> actualMsoAudits = getJobMsoAuditStatusForAlaCarte( uuid, null, null);
+ List<JobAuditStatus> expectedMsoAudits = ImmutableList.of(
+ new JobAuditStatus(UUID.fromString(uuid), "FAILED", SourceStatus.MSO, null,
+ "Http Code:500, \"messageId\":\"SVC0002\",\"text\":\"JSON Object Mapping Request\"", false, "serviceInstanceName"));
+ assertThat(actualMsoAudits, is(expectedMsoAudits));
+ }, 15);
+
+ //assert error audit status
+ Map<String, Object> bulkForRetry = objectMapper.readValue(getRetryBulk(uuid).getBody(), new TypeReference<Map<String, Object>>(){});
+ String serviceTrackById = bulkForRetry.get("trackById").toString();
+ Map<String, Object> resourceAuditInfo = (Map) getResourceAuditInfo(serviceTrackById);
+ assertThat(resourceAuditInfo.get("jobStatus"), equalTo("FAILED"));
+ assertThat(resourceAuditInfo.get("additionalInfo"), equalTo("Http Code:500, \"messageId\":\"SVC0002\",\"text\":\"JSON Object Mapping Request\""));
+ }
+
+ @Test(expectedExceptions = RuntimeException.class)
+ public void getAuditInfoForALaCarte_badResponseFromMso_throwsException() {
+ registerExpectationFromPreset(
+ new PresetMSOOrchestrationRequestGetErrorResponse(500),
+ RegistrationStrategy.CLEAR_THEN_SET);
+ getJobMsoAuditStatusForAlaCarte( UUID.randomUUID().toString(), "405652f4-ceb3-4a75-9474-8aea71480a77", null);
+ }
+
+ private void assertServiceInfoSpecificDeletion(String jobId, JobStatus jobStatus, String serviceInstanceName, String serviceType) {
+ assertExpectedStatusAndServiceInfo(jobStatus, jobId, true, new ServiceInfo(
+ "us16807000", jobStatus, false,
+ null, null, null,
+ null, null,
+ null, null,
+ null, null,
+ serviceType, null,
+ null, serviceInstanceName,
+ "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
+ jobId, null, ServiceAction.DELETE, false)
+ );
+ }
+
+
+ enum Scenario {
+ PARALLEL, COMPLETED, NAME_TAKEN, DUPLICATE_NAME, IN_PROGRESS, MSO_FAIL
+ }
+
+}
diff --git a/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest3.java b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest3.java
new file mode 100644
index 000000000..eed6ee90b
--- /dev/null
+++ b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest3.java
@@ -0,0 +1,645 @@
+package org.onap.vid.api;
+
+import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.not;
+import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
+import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
+import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet.COMPLETE;
+import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.RELATED_VNF1_ACTION;
+import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.RELATED_VNF2_ACTION;
+import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.SERVICE_NAME;
+import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.VNF_GROUP1_ACTION;
+import static vid.automation.test.services.SimulatorApi.registerExpectationFromPreset;
+import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.function.Function;
+import org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset;
+import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAISearchNodeQueryNonEmptyResult;
+import org.onap.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember.InstanceGroupMemberAction;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateNetworkALaCarteServiceCypress2;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceMultipleVnfsServiceCypress;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteServiceCypress;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteServiceCypress2;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfGroup;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteBaseVfModuleCypress;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteNetworkAlaCarteCypress;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteService;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteVfModuleCypress;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteVnfAlaCarteCypress;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames;
+import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
+import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
+import org.onap.vid.model.asyncInstantiation.JobAuditStatus;
+import org.onap.vid.model.asyncInstantiation.JobAuditStatus.SourceStatus;
+import org.onap.vid.model.asyncInstantiation.ServiceInfo;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import vid.automation.test.infra.FeatureTogglingTest;
+import vid.automation.test.infra.Features;
+import vid.automation.test.model.JobStatus;
+import vid.automation.test.model.ServiceAction;
+import vid.automation.test.services.AsyncJobsService;
+import vid.automation.test.services.SimulatorApi;
+import vid.automation.test.services.SimulatorApi.RegistrationStrategy;
+
+@FeatureTogglingTest({Features.FLAG_ASYNC_JOBS, Features.FLAG_ASYNC_INSTANTIATION, Features.FLAG_ASYNC_ALACARTE_VNF})
+public class AsyncInstantiationALaCarteApiTest3 extends AsyncInstantiationBase {
+
+ private static final String CREATE_BULK_OF_ALACARTE_REQUEST = "asyncInstantiation/vidRequestCreateALaCarte.json";
+ private static final String CREATE_BULK_OF_ALACARTE_MULTIPLE_VNF_NETWORK_REQUEST_CYPRESS = "a-la-carte/redux-multiple-vnf-network.json";
+ private static final String CREATE_BULK_OF_ALACARTE_REQUEST_WITH_VNF_GROUP = "VnfGroup/serviceWithVnfGroupCreateRequest.json";
+ private static final String PAYLOAD_TEMPLATE_1_VNF_GROUP_WITH_3_MEMBERS_REQUEST = "VnfGroup/payloadTemplate1VnfGroupWith3MembersRequest.json";
+ private static final String DELETE_AND_CREATE_NETWORK_FROM_SERVICE = "asyncInstantiation/vidRequestDelete1Create1Network.json";
+ private static final String DELETE_SERVICE_WITH_NETWORK = "asyncInstantiation/vidRequestDeleteServiceWithNetwork.json";
+ private static final String DELETE_AND_CREATE_VNF_FROM_SERVICE = "asyncInstantiation/vidRequestDelete1Create1Vnf.json";
+ private static final String DELETE_SERVICE_WITH_VNF = "asyncInstantiation/vidRequestDeleteServiceWithVnf.json";
+
+
+ private static final String FIRST_REQUEST_ID = "d1011670-0e1a-4b74-945d-8bf5aede1d9c";
+ private static final String SECOND_REQUEST_ID = "e2011670-0e1a-4b74-945d-8bf5aede1d9c";
+ private static final String THIRD_REQUEST_ID = "f3011670-0e1a-4b74-945d-8bf5aede1d9c";
+ private static final String SERVICE_INSTANCE_ID = BaseMSOPreset.DEFAULT_INSTANCE_ID;
+ private static final String MSO_COMPLETE_STATUS = "COMPLETE";
+ private static final String MSO_FAILED_STATUS = "FAILED";
+
+
+ @DataProvider
+ public static Object[][] scenarios() {
+ return new Object[][]{
+ {Scenario.PARALLEL},
+ {Scenario.COMPLETED},
+// {Scenario.NAME_TAKEN}, Not relevant because the name uniqueness is supported only for bulk in Macro
+// {Scenario.DUPLICATE_NAME}, Not relevant because name duplication is not handled in A La Carte
+ {Scenario.IN_PROGRESS},
+ {Scenario.MSO_FAIL}
+ };
+ }
+
+ @AfterMethod
+ protected void dropAllFromNameCounter() {
+ AsyncJobsService asyncJobsService = new AsyncJobsService();
+ asyncJobsService.dropAllFromNameCounter();
+ }
+
+ @Test(dataProvider = "multipleVnfDataProvider")
+ public void deployServiceFromCypress__multipleVnfsAndNetwork(String expectedStatus, JobStatus expectedJobStatus) {
+ dropAllFromNameCounter();// needed because each data provider info not going to after method
+ final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "serviceInstanceName");
+
+ List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
+ new PresetMSOCreateServiceInstanceMultipleVnfsServiceCypress(names, 0, DEFAULT_REQUEST_ID),
+ new PresetMSOCreateVnfALaCarteServiceCypress(FIRST_REQUEST_ID, SERVICE_INSTANCE_ID,"VFvGeraldine00001", "zzz1"),
+ new PresetMSOCreateVnfALaCarteServiceCypress(SECOND_REQUEST_ID, SERVICE_INSTANCE_ID,"VFvGeraldine00001_001", "ONAP"),
+ new PresetMSOCreateNetworkALaCarteServiceCypress2(THIRD_REQUEST_ID, SERVICE_INSTANCE_ID, "ExtVL")
+ );
+ List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
+ new PresetMSOOrchestrationRequestGet(expectedStatus.equals("SERVICE_FAILED") ? MSO_FAILED_STATUS : MSO_COMPLETE_STATUS, DEFAULT_REQUEST_ID),
+ new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, FIRST_REQUEST_ID, "First VNF instance was created successfully." ),
+ new PresetMSOOrchestrationRequestGet(expectedStatus, SECOND_REQUEST_ID, expectedStatus.equals(MSO_COMPLETE_STATUS)?"Second VNF instance was created successfully.": MSO_BASE_ERROR),
+ new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, THIRD_REQUEST_ID,"Network was created successfully.")
+ );
+ List<BasePreset> presets = getPresets( createPresets, inProgressPresets);
+
+ registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
+ registerExpectationFromPreset(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC, RegistrationStrategy.APPEND);
+
+ final List<String> uuids = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_MULTIPLE_VNF_NETWORK_REQUEST_CYPRESS);
+
+ assertThat(uuids, hasSize(1));
+ final String jobId = uuids.get(0);
+
+ //expected vid statuses
+ ImmutableList<JobAuditStatus> vidAuditStatuses;
+
+ if (expectedStatus.equals(MSO_COMPLETE_STATUS)){
+ vidAuditStatuses = vidAuditStatusesCompleted(jobId);
+ } else if (expectedStatus.equals("SERVICE_FAILED")){
+ vidAuditStatuses = vidAuditStatusesFailed(jobId);
+ } else {
+ vidAuditStatuses = vidAuditStatusesCompletedWithErrors(jobId);
+ }
+
+ assertServiceInfoSpecific3(jobId, expectedJobStatus , names.get(SERVICE_NAME));
+ assertAuditStatuses(jobId, vidAuditStatuses, null);
+ }
+
+
+ @DataProvider
+ Object[][] multipleVnfDataProvider() {
+ return new Object[][]{{MSO_FAILED_STATUS, JobStatus.COMPLETED_WITH_ERRORS},{MSO_COMPLETE_STATUS, JobStatus.COMPLETED}, {"SERVICE_FAILED", JobStatus.FAILED}};
+ }
+
+ @Test
+ @FeatureTogglingTest(Features.FLAG_1902_VNF_GROUPING)
+ public void deploy1ServiceWith1VnfGroup() {
+ final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "Grouping_Service_Instance");
+ String serviceReqId = "3cf5ea96-6b34-4945-b5b1-4a7798b1caf2";
+ String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID;
+ String instanceGroupReqId = "715a5106-cdcc-44ee-8923-83d68a896908";
+
+ List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
+ new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService(names, 0, serviceReqId),
+ new PresetMSOCreateVnfGroup("ABC", instanceGroupReqId, PresetMSOCreateVnfGroup.MODEL_INFO_1, serviceInstanceId, false));
+ List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
+ new PresetMSOOrchestrationRequestGet("COMPLETE", serviceReqId),
+ new PresetMSOOrchestrationRequestGet("COMPLETE", instanceGroupReqId, "Instance group was created successfully."));
+ List<BasePreset> presets = getPresets(createPresets, inProgressPresets);
+
+ registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
+
+ final List<String> uuids = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_REQUEST_WITH_VNF_GROUP);
+
+ assertThat(uuids, hasSize(1));
+ final String jobId = uuids.get(0);
+
+ assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, new ServiceInfo(
+ "us16807000", JobStatus.COMPLETED, false,
+ "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
+ null, null,
+ null, null,
+ null, null,
+ "TYLER SILVIA", "SILVIA ROBBINS",
+ null, names.get(SERVICE_NAME),
+ "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
+ jobId, null, ServiceAction.INSTANTIATE, false));
+
+
+ assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId),null);
+
+ assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
+ TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(createPresets.get(1).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L)));
+ }
+
+ @DataProvider
+ public static Object[][] addAndDeleteMembersMsoStatus() {
+ return new Object[][]{
+ {MSO_COMPLETE_STATUS, MSO_COMPLETE_STATUS, JobStatus.COMPLETED},
+ {MSO_FAILED_STATUS, MSO_FAILED_STATUS, JobStatus.FAILED},
+ {MSO_COMPLETE_STATUS, MSO_FAILED_STATUS, JobStatus.COMPLETED_WITH_ERRORS}
+ };
+ }
+
+ @Test(dataProvider = "addAndDeleteMembersMsoStatus")
+ @FeatureTogglingTest(Features.FLAG_1902_VNF_GROUPING)
+ public void add1delete1GroupMembers_withGoodResponseFromMso_verifyStatusAndRequests(String firstMemberStatus, String secondMemberStatus, JobStatus expectedJobStatus) {
+
+ String firstMemberRequestId = UUID.randomUUID().toString();
+ String secondMemberRequestId = UUID.randomUUID().toString();
+
+ List<PresetMSOAddOrRemoveOneInstanceGroupMember> instanceGroupMemberPreset = ImmutableList.of(
+ new PresetMSOAddOrRemoveOneInstanceGroupMember("VNF_GROUP1_INSTANCE_ID", "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), firstMemberRequestId, InstanceGroupMemberAction.Add),
+ new PresetMSOAddOrRemoveOneInstanceGroupMember("VNF_GROUP1_INSTANCE_ID", "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), secondMemberRequestId, InstanceGroupMemberAction.Remove)
+ );
+ List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
+ new PresetMSOOrchestrationRequestGet(firstMemberStatus, firstMemberRequestId),
+ new PresetMSOOrchestrationRequestGet(secondMemberStatus, secondMemberRequestId)
+ );
+
+ List<BasePreset> presets = getGroupMembersPresets(instanceGroupMemberPreset,inProgressPresets);
+ registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
+ final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(
+ VNF_GROUP1_ACTION, "None",
+ RELATED_VNF1_ACTION, "Create",
+ RELATED_VNF2_ACTION, "None_Delete"
+ ), PAYLOAD_TEMPLATE_1_VNF_GROUP_WITH_3_MEMBERS_REQUEST);
+
+ assertThat(uuids, hasSize(1));
+ final String jobId = uuids.get(0);
+
+ assertAuditStatuses(jobId, vidAuditStatuses(jobId, expectedJobStatus), null, 60);
+ assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
+ TestUtils.hasOrLacksOfEntry(instanceGroupMemberPreset.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(instanceGroupMemberPreset.get(1).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L)
+ ));
+ }
+
+ @Test
+ @FeatureTogglingTest(Features.FLAG_1902_VNF_GROUPING)
+ public void addVnfGroupWith2GroupMembers_withGoodResponseFromMso_verifyStatusAndRequests() {
+
+ String vnfGroupRequestId = UUID.randomUUID().toString();
+ String firstMemberRequestId = UUID.randomUUID().toString();
+ String secondMemberRequestId = UUID.randomUUID().toString();
+
+ List <PresetMSOCreateVnfGroup> vnfGroupPreset = ImmutableList.of(
+ new PresetMSOCreateVnfGroup("VNF_GROUP1_INSTANCE_NAME",vnfGroupRequestId,PresetMSOCreateVnfGroup.MODEL_INFO_0,"service-instance-id", true));
+ List<PresetMSOAddOrRemoveOneInstanceGroupMember> instanceGroupMemberPreset = ImmutableList.of(
+ new PresetMSOAddOrRemoveOneInstanceGroupMember("VNF_GROUP1_INSTANCE_ID", "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), firstMemberRequestId, InstanceGroupMemberAction.Add),
+ new PresetMSOAddOrRemoveOneInstanceGroupMember("VNF_GROUP1_INSTANCE_ID", "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), secondMemberRequestId, InstanceGroupMemberAction.Add)
+ );
+ List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
+ new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupRequestId),
+ new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, firstMemberRequestId),
+ new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, secondMemberRequestId)
+ );
+
+ final ImmutableList.Builder<BasePreset> basePresetBuilder = new ImmutableList.Builder<>();
+ basePresetBuilder
+ .add(new PresetGetSessionSlotCheckIntervalGet())
+ .add(new PresetAAIGetSubscribersGet())
+ .addAll(instanceGroupMemberPreset)
+ .addAll(inProgressPresets)
+ .addAll(vnfGroupPreset);
+ List<BasePreset> presets = basePresetBuilder.build();
+
+ registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
+ final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(
+ VNF_GROUP1_ACTION, "Create",
+ RELATED_VNF1_ACTION, "Create",
+ RELATED_VNF2_ACTION, "Create"
+ ), PAYLOAD_TEMPLATE_1_VNF_GROUP_WITH_3_MEMBERS_REQUEST);
+
+ assertThat(uuids, hasSize(1));
+ final String jobId = uuids.get(0);
+
+ assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), null, 60);
+ assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
+ TestUtils.hasOrLacksOfEntry(vnfGroupPreset.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(instanceGroupMemberPreset.get(0).getReqPath(), 2L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L),
+ TestUtils.hasOrLacksOfEntry(inProgressPresets.get(2).getReqPath(), 1L)
+ ));
+ }
+
+ @Test(dataProvider = "scenarios")
+ public void aLaCarteServiceScenarioRunner(Scenario scenario) {
+ /*
+ This tests creates one or more a-la-carte requests, following one of the these scenarios:
+
+ MSO_FAIL: Submits to MSO, but while getting Orchestration status -> MSO
+ reports failure
+ COMPLETED: Clean legit flow.
+ NAME_TAKEN: Sends request for instance, where AAI reports the name is
+ already taken. Therefore, MSO expects added postfix _001.
+ IN_PROGRESS: Submits to MSO, but while getting Orchestration status -> MSO
+ reports IN_PROGRESS endlessly
+ DUPLICATE_NAME: Sends two requests for instances with the same name.
+ PARALLEL: Submits 3 requests, that must not interfere with each other.
+ */
+
+ registerExpectationFromPresets(ImmutableList.of(
+ new PresetGetSessionSlotCheckIntervalGet(),
+ new PresetAAIGetSubscribersGet()
+ ), RegistrationStrategy.CLEAR_THEN_SET);
+
+
+ final String name0 = randomAlphabetic(18);
+
+ OneServiceActor inProgressCase = new OneServiceActor(
+ scenario == Scenario.PARALLEL || scenario == Scenario.IN_PROGRESS || scenario == Scenario.DUPLICATE_NAME,
+ "IN_PROGRESS", "status #1",
+ ImmutableMap.of(SERVICE_NAME, name0), 0,
+ JobStatus.IN_PROGRESS, this::vidAuditStatusesInProgress
+ );
+
+ OneServiceActor completedCase = new OneServiceActor(
+ scenario == Scenario.PARALLEL || scenario == Scenario.COMPLETED,
+ MSO_COMPLETE_STATUS, "status #2",
+ ImmutableMap.of(SERVICE_NAME, randomAlphabetic(5)), 0,
+ JobStatus.COMPLETED, this::vidAuditStatusesCompleted
+ );
+
+ final String name1 = randomAlphabetic(5);
+ OneServiceActor occupiedNameCase = new OneServiceActor(
+ scenario == Scenario.NAME_TAKEN,
+ MSO_COMPLETE_STATUS, "status #6",
+ ImmutableMap.of(SERVICE_NAME, name1), 1,
+ JobStatus.COMPLETED, this::vidAuditStatusesCompleted,
+ ImmutableList.of(new PresetAAISearchNodeQueryNonEmptyResult("service-instance", name1))
+ );
+
+ OneServiceActor failedCase = new OneServiceActor(
+ scenario == Scenario.PARALLEL || scenario == Scenario.MSO_FAIL,
+ "FAILED", "status #3",
+ ImmutableMap.of(SERVICE_NAME, randomAlphabetic(10)), 0,
+ JobStatus.FAILED, this::vidAuditStatusesFailed
+ );
+
+ OneServiceActor duplicateNameCase = new OneServiceActor(
+ scenario == Scenario.DUPLICATE_NAME,
+ MSO_COMPLETE_STATUS, "status #4",
+ ImmutableMap.of(SERVICE_NAME, name0), 1,
+ JobStatus.COMPLETED, this::vidAuditStatusesCompleted
+ );
+
+ OneServiceActor inProgressTooLongCase = new OneServiceActor(
+ scenario == Scenario.IN_PROGRESS,
+ "IN_PROGRESS", "status #5",
+ ImmutableMap.of(SERVICE_NAME, randomAlphabetic(10)), 0,
+ JobStatus.FAILED, this::vidAuditStatusesFailed, 24
+ );
+
+ final List<OneServiceActor> servicesActors =
+ ImmutableList.of(inProgressCase, completedCase, occupiedNameCase, failedCase, duplicateNameCase, inProgressTooLongCase);
+
+ servicesActors.forEach(actor -> registerExpectationFromPresets(actor.getPresets(),
+ RegistrationStrategy.APPEND));
+
+ servicesActors.forEach(OneServiceActor::createInstances);
+
+ servicesActors.forEach(OneServiceActor::assertServiceInfo);
+ servicesActors.forEach(OneServiceActor::assertAuditStatuses2);
+ }
+
+ @Test
+ public void delete1Create1NetworkFromService() {
+ String deleteRequestId = UUID.randomUUID().toString();
+ String createRequestId = UUID.randomUUID().toString();
+ String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID;
+ String networkInstanceId = "NETWORK_INSTANCE_ID";
+
+ registerExpectationFromPresets(ImmutableList.of(
+ new PresetMSODeleteNetworkAlaCarteCypress(deleteRequestId, serviceInstanceId, networkInstanceId, "us16807000"),
+ new PresetMSOOrchestrationRequestGet(COMPLETE, deleteRequestId),
+ new PresetMSOCreateNetworkALaCarteServiceCypress2(createRequestId, serviceInstanceId, "ExtVL", "action-data", "6b528779-44a3-4472-bdff-9cd15ec93450"),
+ new PresetMSOOrchestrationRequestGet(COMPLETE, createRequestId),
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC
+ ), RegistrationStrategy.CLEAR_THEN_SET);
+
+ List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_AND_CREATE_NETWORK_FROM_SERVICE);
+ assertThat(uuids, hasSize(1));
+ String jobId = uuids.get(0);
+
+ assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, true, new ServiceInfo(
+ "us16807000", JobStatus.COMPLETED, false,
+ "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
+ "JAG1", "YUDFJULP-JAG1",
+ "092eb9e8e4b7412e8787dd091bc58e86", "USP-SIP-IC-24335-T-01",
+ "JANET25", null,
+ "TYLER SILVIA", null,
+ null, "InstanceName",
+ "6b528779-44a3-4472-bdff-9cd15ec93450", "action-data", "1.0",
+ jobId, null, ServiceAction.UPDATE, false)
+ );
+ }
+
+ @Test
+ public void deleteServiceWithNetwork() {
+ String deleteNetworkRequestId = UUID.randomUUID().toString();
+ String deleteServiceRequestId = UUID.randomUUID().toString();
+ String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID;
+ String networkInstanceId = "NETWORK_INSTANCE_ID";
+
+ registerExpectationFromPresets(ImmutableList.of(
+ new PresetMSODeleteNetworkAlaCarteCypress(deleteNetworkRequestId, serviceInstanceId, networkInstanceId, "us16807000"),
+ new PresetMSOOrchestrationRequestGet(COMPLETE, deleteNetworkRequestId),
+ new PresetMSODeleteService(deleteServiceRequestId, serviceInstanceId),
+ new PresetMSOOrchestrationRequestGet(COMPLETE, deleteServiceRequestId),
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC
+ ), RegistrationStrategy.CLEAR_THEN_SET);
+
+ List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_SERVICE_WITH_NETWORK);
+ assertThat(uuids, hasSize(1));
+ String jobId = uuids.get(0);
+
+ assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, true, new ServiceInfo(
+ "us16807000", JobStatus.COMPLETED, false,
+ "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
+ "JAG1", "YUDFJULP-JAG1",
+ "092eb9e8e4b7412e8787dd091bc58e86", "USP-SIP-IC-24335-T-01",
+ "JANET25", null,
+ "TYLER SILVIA", null,
+ null, "InstanceName",
+ "6b528779-44a3-4472-bdff-9cd15ec93450", "action-data", "1.0",
+ jobId, null, ServiceAction.DELETE, false)
+ );
+ }
+
+ @Test
+ public void delete1VnfWithVfModulesAndCreate1VnfFromService() {
+ String deleteVnfRequestId = UUID.randomUUID().toString();
+ String createVnfRequestId = UUID.randomUUID().toString();
+ String deleteVfModuleRequestId = UUID.randomUUID().toString();
+ String deleteBaseVfModuleRequestId = UUID.randomUUID().toString();
+ String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID;
+ String vnfInstanceId = "VNF_INSTANCE_ID";
+
+ registerExpectationFromPresets(ImmutableList.of(
+ new PresetAAIGetSubscribersGet(),
+ new PresetMSODeleteVnfAlaCarteCypress(deleteVnfRequestId, serviceInstanceId, vnfInstanceId, "us16807000"),
+ new PresetMSOOrchestrationRequestGet(COMPLETE, deleteVnfRequestId),
+ new PresetSDCGetServiceToscaModelGet("6b528779-44a3-4472-bdff-9cd15ec93450", "csar-withDynamicFields-ecompNamingFalse-partialModelDetails-vnfEcompNamingFalse.zip"),
+ new PresetSDCGetServiceMetadataGet("6b528779-44a3-4472-bdff-9cd15ec93450", "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0" , "csar-withDynamicFields-ecompNamingFalse-partialModelDetails-vnfEcompNamingFalse.zip"),
+ new PresetMSODeleteVfModuleCypress(deleteVfModuleRequestId, serviceInstanceId, vnfInstanceId, "VF_MODULE_INSTANCE_ID"),
+ new PresetMSOOrchestrationRequestGet(COMPLETE, deleteVfModuleRequestId),
+ new PresetMSODeleteBaseVfModuleCypress(deleteBaseVfModuleRequestId, serviceInstanceId, vnfInstanceId, "VF_MODULE_BASE_INSTANCE_ID"),
+ new PresetMSOOrchestrationRequestGet(COMPLETE, deleteBaseVfModuleRequestId),
+ new PresetMSOCreateVnfALaCarteServiceCypress2(createVnfRequestId, serviceInstanceId, "2017388_PASQUALEvPEmCaNkinstanceName", "zzz1"),
+ new PresetMSOOrchestrationRequestGet(COMPLETE, createVnfRequestId),
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_SOME_LEGACY_REGION_TO_ATT_AIC,
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC,
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_AAIAIC25_TO_ATT_AIC
+ ), RegistrationStrategy.CLEAR_THEN_SET);
+
+ List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_AND_CREATE_VNF_FROM_SERVICE);
+ assertThat(uuids, hasSize(1));
+ String jobId = uuids.get(0);
+
+ assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, true, new ServiceInfo(
+ "us16807000", JobStatus.COMPLETED, false,
+ "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
+ "NFT1", "NFTJSSSS-NFT1",
+ "bae71557c5bb4d5aac6743a4e5f1d054", "AIN Web Tool-15-D-testalexandria",
+ "hvf6", null,
+ "TYLER SILVIA", null,
+ "f8791436-8d55-4fde-b4d5-72dd2cf13cfb", "mCaNkinstancename",
+ "6b528779-44a3-4472-bdff-9cd15ec93450", "action-data", "1.0",
+ jobId, null, ServiceAction.UPDATE, false)
+ );
+ }
+
+ @Test
+ public void deleteServiceWithVnf() {
+ String deleteVnfRequestId = UUID.randomUUID().toString();
+ String deleteServiceRequestId = UUID.randomUUID().toString();
+ String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID;
+ String vnfInstanceId = "VNF_INSTANCE_ID";
+
+ registerExpectationFromPresets(ImmutableList.of(
+ new PresetMSODeleteVnfAlaCarteCypress(deleteVnfRequestId, serviceInstanceId, vnfInstanceId, "us16807000"),
+ new PresetMSOOrchestrationRequestGet(COMPLETE, deleteVnfRequestId),
+ new PresetMSODeleteService(deleteServiceRequestId, serviceInstanceId),
+ new PresetMSOOrchestrationRequestGet(COMPLETE, deleteServiceRequestId),
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_SOME_LEGACY_REGION_TO_ATT_AIC
+ ), RegistrationStrategy.CLEAR_THEN_SET);
+
+ List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_SERVICE_WITH_VNF);
+ assertThat(uuids, hasSize(1));
+ String jobId = uuids.get(0);
+
+ assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, true, new ServiceInfo(
+ "us16807000", JobStatus.COMPLETED, false,
+ "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
+ "NFT1", "NFTJSSSS-NFT1",
+ "bae71557c5bb4d5aac6743a4e5f1d054", "AIN Web Tool-15-D-testalexandria",
+ "hvf6", null,
+ "TYLER SILVIA", null,
+ "f8791436-8d55-4fde-b4d5-72dd2cf13cfb", "mCaNkinstancename",
+ "6b528779-44a3-4472-bdff-9cd15ec93450", "action-data", "1.0",
+ jobId, null, ServiceAction.DELETE, false)
+ );
+ }
+
+ private ImmutableList<JobAuditStatus> vidAuditStatusesInProgress(String jobId) {
+ return ImmutableList.of(
+ vidAuditStatus(jobId, "PENDING", false),
+ vidAuditStatus(jobId, "IN_PROGRESS", false)
+ );
+ }
+
+ private ImmutableList<JobAuditStatus> vidAuditStatusesCompleted(String jobId) {
+ return ImmutableList.of(
+ vidAuditStatus(jobId, "PENDING", false),
+ vidAuditStatus(jobId, "IN_PROGRESS", false),
+ vidAuditStatus(jobId, "COMPLETED", true)
+ );
+ }
+
+ private ImmutableList<JobAuditStatus> vidAuditStatuses(String jobId, JobStatus jobStatus) {
+ switch(jobStatus) {
+ case COMPLETED:
+ return vidAuditStatusesCompleted(jobId);
+ case COMPLETED_WITH_ERRORS:
+ return vidAuditStatusesCompletedWithErrors(jobId);
+ case FAILED:
+ return vidAuditStatusesFailed(jobId);
+ case IN_PROGRESS:
+ return vidAuditStatusesInProgress(jobId);
+ }
+
+ return null;
+ }
+
+ private ImmutableList<JobAuditStatus> msoAuditStatuses(String jobId , String lastStatus, String lastAdditionalInfo) {
+ final List<JobAuditStatus> auditMsoStatuses = getAuditStatuses(jobId, SourceStatus.MSO.name());
+ final UUID actualRequestId = auditMsoStatuses.get(0).getRequestId();
+ return ImmutableList.of(
+ msoAuditStatus(jobId, "REQUESTED", null, actualRequestId),
+ msoAuditStatus(jobId, lastStatus, lastAdditionalInfo, actualRequestId)
+ );
+ }
+
+ private JobAuditStatus msoAuditStatus(String jobId, String jobStatus, String additionalInfo, UUID requestId) {
+ return new JobAuditStatus(UUID.fromString(jobId), jobStatus, SourceStatus.MSO, requestId, additionalInfo, false);
+ }
+
+ private void assertServiceInfoSpecific3(String jobId, JobStatus jobStatus, String serviceInstanceName) {
+ assertExpectedStatusAndServiceInfo(jobStatus, jobId, true, new ServiceInfo(
+ "us16807000", jobStatus, false,
+ "aaa1", "aaa1", "yyy1",
+ "YYY1", "UUUAIAAI-YYY1",
+ "1178612d2b394be4834ad77f567c0af2", "AIN Web Tool-15-D-SSPtestcustome",
+ "hvf6", null,
+ "TYLER SILVIA", null,
+ null, serviceInstanceName,
+ "6e59c5de-f052-46fa-aa7e-2fca9d674c44", "ComplexService", "1.0",
+ jobId, null, ServiceAction.INSTANTIATE, false)
+ );
+ }
+
+ private List<BasePreset> getGroupMembersPresets(List<PresetMSOAddOrRemoveOneInstanceGroupMember> deleteMembersPreset, List<PresetMSOOrchestrationRequestGet> inProgressPresets) {
+ final ImmutableList.Builder<BasePreset> basePresetBuilder = new ImmutableList.Builder<>();
+ basePresetBuilder
+ .add(new PresetGetSessionSlotCheckIntervalGet())
+ .add(new PresetAAIGetSubscribersGet())
+ .addAll(deleteMembersPreset)
+ .addAll(inProgressPresets);
+ return basePresetBuilder.build();
+ }
+
+
+ enum Scenario {
+ PARALLEL, COMPLETED, NAME_TAKEN, DUPLICATE_NAME, IN_PROGRESS, MSO_FAIL
+ }
+
+ class OneServiceActor {
+ private final boolean isRelevant;
+ private final String requestId;
+ private final String msoInfo;
+ private final Map<PresetMSOServiceInstanceGen2WithNames.Keys, String> serviceNames;
+ private final int suffix;
+ private final String expectedMsoLastStatus;
+ private final JobStatus jobStatus;
+ private final Function<String, List<JobAuditStatus>> jobAuditStatusesProvider;
+ private String jobId;
+ private int startedHoursAgo = 1;
+ private List<BasePreset> morePresets = ImmutableList.of();
+
+ private OneServiceActor(boolean isRelevant, String msoLastStatus, String msoInfo, Map<PresetMSOServiceInstanceGen2WithNames.Keys, String> serviceNames, int suffix, JobStatus jobStatus, Function<String, List<JobAuditStatus>> jobAuditStatusesProvider) {
+ this.isRelevant = isRelevant;
+ this.requestId = UUID.randomUUID().toString();
+ this.msoInfo = msoInfo;
+ this.serviceNames = serviceNames;
+ this.suffix = suffix;
+ this.expectedMsoLastStatus = msoLastStatus;
+ this.jobStatus = jobStatus;
+ this.jobAuditStatusesProvider = jobAuditStatusesProvider;
+ }
+
+ private OneServiceActor(boolean isRelevant, String msoLastStatus, String msoInfo, Map<PresetMSOServiceInstanceGen2WithNames.Keys, String> serviceNames, int suffix, JobStatus jobStatus, Function<String, List<JobAuditStatus>> jobAuditStatusesProvider, int startedHoursAgo) {
+ this(isRelevant, msoLastStatus, msoInfo, serviceNames, suffix, jobStatus, jobAuditStatusesProvider);
+ this.startedHoursAgo = startedHoursAgo;
+ }
+
+ private OneServiceActor(boolean isRelevant, String msoLastStatus, String msoInfo, Map<PresetMSOServiceInstanceGen2WithNames.Keys, String> serviceNames, int suffix, JobStatus jobStatus, Function<String, List<JobAuditStatus>> jobAuditStatusesProvider, List<BasePreset> morePresets) {
+ this(isRelevant, msoLastStatus, msoInfo, serviceNames, suffix, jobStatus, jobAuditStatusesProvider);
+ this.morePresets = morePresets;
+ }
+
+ public List<BasePreset> getPresets() {
+ // if not relevant -> return empty list
+ return isRelevant ?
+ ImmutableList.<BasePreset>builder().add(
+ new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService(serviceNames, suffix, requestId),
+ new PresetMSOOrchestrationRequestGet(expectedMsoLastStatus, requestId, msoInfo, startedHoursAgo)
+ ).addAll(morePresets).build()
+ : ImmutableList.of();
+ }
+
+ private void createInstances() {
+ // call VID with 1 request, keep the job id
+ if (!isRelevant) return;
+ final List<String> jobIds = createBulkOfInstances(false, 1, serviceNames, CREATE_BULK_OF_ALACARTE_REQUEST);
+ assertThat(jobIds, hasSize(1));
+ jobId = jobIds.get(0);
+ }
+
+ private void assertServiceInfo() {
+ if (!isRelevant) return;
+ assertThat(jobId, is(not(nullValue())));
+ assertServiceInfoSpecific1(jobId, jobStatus, serviceNames.get(SERVICE_NAME));
+ }
+
+ private void assertAuditStatuses2() {
+ if (!isRelevant) return;
+ assertThat(jobId, is(not(nullValue())));
+ assertAuditStatuses(jobId, jobAuditStatusesProvider.apply(jobId), msoAuditStatuses(jobId, expectedMsoLastStatus, msoInfo));
+ }
+ }
+
+}
diff --git a/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationApiTest.java
index a5b72c261..5c4d8a876 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationApiTest.java
@@ -1,27 +1,22 @@
package org.onap.vid.api;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
import net.bytebuddy.utility.RandomString;
import net.javacrumbs.jsonunit.JsonAssert;
-import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.CoreMatchers;
-import org.hamcrest.Description;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
-import org.onap.simulator.presetGenerator.presets.aai.PresetAAISearchNodeQueryEmptyResult;
import org.onap.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet;
import org.onap.simulator.presetGenerator.presets.mso.*;
import org.onap.vid.model.asyncInstantiation.JobAuditStatus;
import org.onap.vid.model.asyncInstantiation.ServiceInfo;
-import org.onap.vid.model.mso.MsoResponseWrapper2;
-import org.springframework.core.ParameterizedTypeReference;
+import org.onap.sdc.ci.tests.datatypes.UserCredentials;
import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
import org.springframework.web.client.HttpClientErrorException;
-import org.springframework.web.client.RestTemplate;
+import org.springframework.web.client.HttpServerErrorException;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
@@ -32,76 +27,33 @@ import vid.automation.test.model.JobStatus;
import vid.automation.test.services.SimulatorApi;
import java.util.*;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.IntStream;
import java.util.stream.Stream;
-import static java.lang.Boolean.FALSE;
-import static java.lang.Boolean.TRUE;
import static java.util.stream.Collectors.*;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.Matchers.hasSize;
import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys;
-import static org.testng.Assert.assertNotNull;
+import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
+import static vid.automation.test.infra.Features.FLAG_1906_INSTANTIATION_API_USER_VALIDATION;
+import static vid.automation.test.utils.ExtendedHamcrestMatcher.hasItemsFromCollection;
@FeatureTogglingTest({Features.FLAG_ASYNC_JOBS, Features.FLAG_ASYNC_INSTANTIATION})
-public class AsyncInstantiationApiTest extends BaseMsoApiTest {
+public class AsyncInstantiationApiTest extends AsyncInstantiationBase {
+ private static final Logger logger = LogManager.getLogger(AsyncInstantiationApiTest.class);
- private static final String CREATE_BULK_OF_MACRO_REQUEST = "asyncInstantiation/vidRequestCreateBulkOfMacro.json";
-
- @DataProvider
- public static Object[][] trueAndFalse() {
- return new Object[][]{{TRUE},{FALSE}};
- }
-
- private String getCreateBulkUri() {
- return uri.toASCIIString() + "/asyncInstantiation/bulk";
- }
-
- private String getHideServiceUri(String jobId) {
- return uri.toASCIIString() + "/asyncInstantiation/hide/"+jobId;
- }
-
- private String getServiceInfoUrl() {
- return uri.toASCIIString() + "/asyncInstantiation";
- }
-
- private String getJobAuditUrl() {
- return uri.toASCIIString() + "/asyncInstantiation/auditStatus/{JOB_ID}?source={SOURCE}";
- }
-
- private String getDeleteServiceUrl(String uuid) {
- return uri.toASCIIString() + "/asyncInstantiation/job/" + uuid;
- }
-
- public static class JobIdAndStatusMatcher extends BaseMatcher<ServiceInfo> {
- private String expectedJobId;
-
- public JobIdAndStatusMatcher(String expectedJobId) {
- this.expectedJobId = expectedJobId;
- }
-
- @Override
- public boolean matches(Object item) {
- if (!(item instanceof ServiceInfo)) {
- return false;
- }
- ServiceInfo serviceInfo = (ServiceInfo) item;
- return expectedJobId.equals(serviceInfo.jobId);
- }
-
- @Override
- public void describeTo(Description description) {
- description.appendText("failed to find job with uuid ")
- .appendValue(expectedJobId);
- }
- }
+ private static final String MSO_BASE_ERROR =
+ "Received error from SDN-C: java.lang.IllegalArgumentException: All keys must be specified for class org."+
+ "opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.vf.module.assignments.vf."+
+ "module.assignments.vms.VmKey. Missing key is getVmType. Supplied key is VmKey [].";
+ private static final String MSO_ERROR = MSO_BASE_ERROR + StringUtils.repeat(" and a lot of sentences for long message", 60);
+ private static final String INSTANCE_GROUP_ID_LABEL = "instanceGroupId";
+ private static final String INSTANCE_GROUP_LABEL = "instanceGroup";
@Test
public void createBulkOfCreateInstances(){
@@ -111,40 +63,6 @@ public class AsyncInstantiationApiTest extends BaseMsoApiTest {
createBulkOfInstancesAndAssert(presets, false, bulkSize, JobStatus.COMPLETED, names);
}
- private Map<Keys,String> generateNames() {
- return Stream.of(Keys.values()).collect(
- Collectors.toMap(x->x, x -> UUID.randomUUID().toString().replace("-","")));
- }
-
- private ImmutableList<BasePreset> addPresetsForCreateBulkOfCreateInstances(int bulkSize, Map<Keys, String> names){
- ImmutableList<BasePreset> msoBulkPresets = IntStream.rangeClosed(1,bulkSize).
- mapToObj(i-> new PresetMSOCreateServiceInstanceGen2WithNames(names, i))
- .collect(ImmutableList.toImmutableList());
- ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>()
- .add(new PresetGetSessionSlotCheckIntervalGet())
- .add(new PresetAAIGetSubscribersGet())
- .add(new PresetAAISearchNodeQueryEmptyResult())
- .addAll(msoBulkPresets)
- .add(new PresetMSOOrchestrationRequestGet())
- .build();
- return presets;
-
- }
-
- private ResponseEntity<List<JobAuditStatus>> auditStatusCall(String url) {
- return restTemplate.exchange(
- url,
- org.springframework.http.HttpMethod.GET,
- null,
- new ParameterizedTypeReference<List<JobAuditStatus>>() {});
- }
-
- @DataProvider
- public static Object[][] auditSources() {
- return new Object[][]{{JobAuditStatus.SourceStatus.VID},{JobAuditStatus.SourceStatus.MSO}};
- }
-
-
@Test(dataProvider = "auditSources")
public void getAuditStatus_nonExistingJobId_returnsEmptyList(JobAuditStatus.SourceStatus source){
List<JobAuditStatus> audits = getAuditStatuses(UUID.randomUUID().toString(), source.name());
@@ -170,13 +88,8 @@ public class AsyncInstantiationApiTest extends BaseMsoApiTest {
for(String jobId: jobIds) {
List<JobAuditStatus> actualVidAudits = getAuditStatuses(jobId, JobAuditStatus.SourceStatus.VID.name());
List<JobAuditStatus> expectedVidAudits = Stream.of(JobStatus.PENDING, JobStatus.IN_PROGRESS, JobStatus.COMPLETED)
- .map(status->new JobAuditStatus(UUID.fromString(jobId),
- status.name(),
- JobAuditStatus.SourceStatus.VID,
- null,
- null,
- status.equals(JobStatus.COMPLETED))).collect(toList());
- assertThat(actualVidAudits, is(expectedVidAudits));
+ .map(status-> vidAuditStatus(jobId, status.name(), status.equals(JobStatus.COMPLETED))).collect(toList());
+ assertThat(actualVidAudits, hasItemsFromCollection(expectedVidAudits));
List<JobAuditStatus> actualMsoAudits = getAuditStatuses(jobId, JobAuditStatus.SourceStatus.MSO.name());
List<JobAuditStatus> expectedMsoAudits = Stream.of("REQUESTED", "COMPLETE")
@@ -190,29 +103,6 @@ public class AsyncInstantiationApiTest extends BaseMsoApiTest {
}
}
- protected List<String> createBulkAndWaitForBeCompleted(int bulkSize){
- Map<Keys, String> names = generateNames();
- ImmutableList<BasePreset> presets = addPresetsForCreateBulkOfCreateInstances(bulkSize, names);
- final List<String> jobIds = createBulkOfInstances(presets, false, bulkSize, names);
- Assert.assertEquals(jobIds.size(),bulkSize);
-
- assertTrue(String.format("Not all services with ids: %s are in state completed after 30 sec",
- jobIds.stream().collect(joining(","))),
-
- Wait.waitFor(y-> serviceListCall().getBody().stream()
- .filter(si -> jobIds.contains(si.jobId))
- .filter(si -> si.jobStatus==JobStatus.COMPLETED)
- .count() == bulkSize,
- null, 30, 1 ));
- return jobIds;
- }
-
- private List<JobAuditStatus> getAuditStatuses(String jobUUID, String source){
- String url = getJobAuditUrl().replace("{JOB_ID}",jobUUID).replace("{SOURCE}", source);
- ResponseEntity<List<JobAuditStatus>> statusesResponse = auditStatusCall(url);
- assertThat(statusesResponse.getStatusCode(), CoreMatchers.equalTo(HttpStatus.OK));
- return statusesResponse.getBody();
- }
@Test(expectedExceptions = HttpClientErrorException.class)
public void addBulkAndDeleteInProgress_deletionIsRejected(){
@@ -245,52 +135,6 @@ public class AsyncInstantiationApiTest extends BaseMsoApiTest {
assertThat("deleted job shall not be present in StatusInfo response", statusesNow, is(statusesBefore));
}
- private Map<String, JobStatus> addBulkAllPendingButOneInProgress(){
- return addBulkAllPendingButOneInProgress(3);
- }
-
- private Map<String, JobStatus> addBulkAllPendingButOneInProgress(int bulkSize){
- Map<Keys, String> names = generateNames();
- ImmutableList<BasePreset> msoBulkPresets = IntStream.rangeClosed(1,bulkSize)
- .mapToObj(i-> new PresetMSOCreateServiceInstanceGen2WithNames(names, i))
- .collect(ImmutableList.toImmutableList());
- ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>()
- .add(new PresetGetSessionSlotCheckIntervalGet())
- .add(new PresetAAISearchNodeQueryEmptyResult())
- .add(new PresetAAIGetSubscribersGet())
- .addAll(msoBulkPresets)
- .add(new PresetMSOOrchestrationRequestGet("IN_PROGRESS"))
- .build();
- final List<String> jobIds = createBulkOfInstances(presets, false, bulkSize, names);
-
- // wait for single IN_PROGRESS, so statuses will stop from changing
- Wait.waitFor(foo -> serviceListCall().getBody().stream()
- .filter(si -> jobIds.contains(si.jobId))
- .anyMatch(si -> si.jobStatus.equals(JobStatus.IN_PROGRESS)),
- null, 20, 1);
-
- final Map<String, JobStatus> statusMapBefore = serviceListCall().getBody().stream()
- .filter(si -> jobIds.contains(si.jobId))
- .collect(toMap(si -> si.jobId, si -> si.jobStatus));
-
- assertThat(jobIds, hasSize(bulkSize));
-
-
- return statusMapBefore;
- }
-
- private String deleteOneJobHavingTheStatus(Map<String, JobStatus> jobIdToStatus, JobStatus jobStatus) {
- final String jobToDelete = jobIdToStatus.entrySet().stream()
- .filter(entry -> entry.getValue().equals(jobStatus))
- .map(Map.Entry::getKey)
- .findFirst().orElseThrow(() -> new AssertionError("no job in " + jobStatus + " state: " + jobIdToStatus));
-
-
- restTemplate.delete(getDeleteServiceUrl(jobToDelete));
-
- return jobToDelete;
- }
-
@Test(invocationCount = 3)
public void createBulkOfCreateInstancesWithSinglePreset_firstOneInProgressOtherArePending(){
final int bulkSize = 3;
@@ -306,7 +150,6 @@ public class AsyncInstantiationApiTest extends BaseMsoApiTest {
// PENDING: The other two jobs - named with _002 and _003 - are the still pending
assertThat(jobIds, hasSize(bulkSize));
assertThat(statuses.get(JobStatus.IN_PROGRESS), hasSize(1));
- assertThat(statuses.get(JobStatus.IN_PROGRESS), everyItem(hasProperty("serviceInstanceName", endsWith("_001"))));
assertThat(statuses.get(JobStatus.PENDING), hasSize(bulkSize - 1));
}
@@ -320,18 +163,16 @@ public class AsyncInstantiationApiTest extends BaseMsoApiTest {
//if there is a preset for create, service shall failed during in_progress (upon get status)
//it there is no preset for create, service shall failed during pending (upon create request)
List<BasePreset> msoBulkPresets = isPresetForCreate ?
- IntStream.rangeClosed(1,bulkSize)
- .mapToObj(i-> new PresetMSOCreateServiceInstanceGen2WithNames(names, i))
- .collect(ImmutableList.toImmutableList()) :
+ generateMsoCreateBulkPresets(bulkSize, names) :
new LinkedList<>();
ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>()
.add(new PresetGetSessionSlotCheckIntervalGet())
.add(new PresetAAIGetSubscribersGet())
- .add(new PresetAAISearchNodeQueryEmptyResult())
+ .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN3_TO_ATT_SABABA)
.addAll(msoBulkPresets)
.add(new PresetMSOOrchestrationRequestGet("FAILED"))
.build();
- List<String> jobIds = createBulkOfInstances(presets, false, bulkSize, names);
+ List<String> jobIds = createBulkOfMacroInstances(presets, false, bulkSize, names);
Assert.assertEquals(jobIds.size(),bulkSize);
boolean result = Wait.waitFor(x->{
List<ServiceInfo> serviceInfoList = serviceListCall().getBody();
@@ -346,13 +187,13 @@ public class AsyncInstantiationApiTest extends BaseMsoApiTest {
public void createBulkOfAssignInstances(){
Map<Keys, String> names = generateNames();
final int bulkSize = 2;
- ImmutableList<BasePreset> msoBulkPresets = IntStream.rangeClosed(1,bulkSize)
+ ImmutableList<BasePreset> msoBulkPresets = IntStream.rangeClosed(0, bulkSize-1)
.mapToObj(i-> new PresetMSOAssignServiceInstanceGen2WithNames(names, i))
.collect(ImmutableList.toImmutableList());
ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>()
.add(new PresetGetSessionSlotCheckIntervalGet())
.add(new PresetAAIGetSubscribersGet())
- .add(new PresetAAISearchNodeQueryEmptyResult())
+ .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN3_TO_ATT_SABABA)
.addAll(msoBulkPresets)
.add(new PresetMSOOrchestrationRequestGet())
.build();
@@ -364,13 +205,12 @@ public class AsyncInstantiationApiTest extends BaseMsoApiTest {
ImmutableList<BasePreset> presets = ImmutableList.of(
new PresetGetSessionSlotCheckIntervalGet(),
new PresetAAIGetSubscribersGet(),
- new PresetAAISearchNodeQueryEmptyResult(),
new PresetMSOServiceInstanceGen2ErrorResponse(406));
List<String> jobIds = createBulkOfInstancesAndAssert(presets, true,1, JobStatus.FAILED, generateNames());
String jobId = jobIds.get(0);
List<JobAuditStatus> actualMsoAudits = getAuditStatuses(jobId, JobAuditStatus.SourceStatus.MSO.name());
- JobAuditStatus expectedMsoAudit = new JobAuditStatus(UUID.fromString(jobId),"FAILED",JobAuditStatus.SourceStatus.MSO,
+ JobAuditStatus expectedMsoAudit = new JobAuditStatus(UUID.fromString(jobId), "FAILED", JobAuditStatus.SourceStatus.MSO,
null,
"Http Code:406, \"messageId\":\"SVC0002\",\"text\":\"JSON Object Mapping Request\"" ,
false);
@@ -378,6 +218,24 @@ public class AsyncInstantiationApiTest extends BaseMsoApiTest {
}
@Test
+ public void whenGetLongErrorMessageFromMso_ThenAuditFirst2000Chars() {
+ Map<Keys, String> names = generateNames();
+ ImmutableList<BasePreset> presets = ImmutableList.of(
+ new PresetGetSessionSlotCheckIntervalGet(),
+ new PresetAAIGetSubscribersGet(),
+ new PresetMSOCreateServiceInstanceGen2WithNames(names, 0),
+ new PresetMSOOrchestrationRequestGet("FAILED", PresetMSOOrchestrationRequestGet.DEFAULT_REQUEST_ID, MSO_ERROR));
+
+ List<String> jobIds = createBulkOfInstancesAndAssert(presets, false, 1, JobStatus.FAILED, names);
+ String jobId = jobIds.get(0);
+ List<JobAuditStatus> actualMsoAudits = getAuditStatuses(jobId, JobAuditStatus.SourceStatus.MSO.name());
+ Optional<JobAuditStatus> jobAuditStatus = actualMsoAudits.stream().filter(x -> x.getJobStatus().equals("FAILED")).findFirst();
+ assertTrue(jobAuditStatus.isPresent());
+ assertThat(jobAuditStatus.get().getAdditionalInfo(), startsWith(MSO_BASE_ERROR));
+ assertThat(jobAuditStatus.get().getAdditionalInfo().length(), is(2000));
+ }
+
+ @Test
public void whenHideCompletedService_thenServiceNotReturnInServiceList(){
List<String> services = createBulkAndWaitForBeCompleted(2);
hideService(services.get(0));
@@ -386,116 +244,14 @@ public class AsyncInstantiationApiTest extends BaseMsoApiTest {
assertThat(serviceInfoList, not(hasItem(services.get(0))));
}
- private MsoResponseWrapper2 hideService(String jobId) {
- MsoResponseWrapper2 responseWrapper2 = callMsoForResponseWrapper(org.springframework.http.HttpMethod.POST, getHideServiceUri(jobId), "");
- return responseWrapper2;
- }
-
- private List<String> createBulkOfInstancesAndAssert(ImmutableList<BasePreset> presets, boolean isPause, int bulkSize, JobStatus finalState, Map<Keys, String> names){
- List<String> jobIds = createBulkOfInstances(presets, isPause, bulkSize, names);
- Assert.assertEquals(jobIds.size(),bulkSize);
- for(String jobId: jobIds) {
- ServiceInfo expectedServiceInfo = new ServiceInfo("vid1", JobStatus.IN_PROGRESS, isPause, "someID",
- "someName", "myProject", "NFT1", "NFTJSSSS-NFT1", "greatTenant", "greatTenant", "mtn3", null,
- "mySubType", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", null, names.get(Keys.SERVICE_NAME),
- "300adb1e-9b0c-4d52-bfb5-fa5393c4eabb", "AIM_TRANSPORT_00004", "1.0", jobId, null);
- JobInfoChecker jobInfoChecker = new JobInfoChecker(
- restTemplate, ImmutableSet.of(JobStatus.PENDING, JobStatus.IN_PROGRESS, finalState), jobId, expectedServiceInfo);
- boolean result = jobInfoChecker.test(null);
- assertTrue("service info of jobId: " + jobId + " was in status: " + jobInfoChecker.lastStatus, result);
-
- jobInfoChecker.setExpectedJobStatus(ImmutableSet.of(finalState));
- if (ImmutableList.of(JobStatus.COMPLETED, JobStatus.PAUSE).contains(finalState)) {
- expectedServiceInfo.serviceInstanceId = "f8791436-8d55-4fde-b4d5-72dd2cf13cfb";
- }
- result = Wait.waitFor(jobInfoChecker, null, 20, 1);
- assertTrue("service info of jobId: " + jobId + " was in status: " + jobInfoChecker.lastStatus, result);
- }
-
- return jobIds;
- }
-
- private List<String> createBulkOfInstances(ImmutableList<BasePreset> presets, boolean isPause, int bulkSize, Map<Keys, String> names){
-
- SimulatorApi.registerExpectationFromPresets(presets, SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET);
-
- String requestBody = TestUtils.convertRequest(objectMapper, CREATE_BULK_OF_MACRO_REQUEST);
- requestBody = requestBody.replace("\"IS_PAUSE_VALUE\"", String.valueOf(isPause)).replace("\"BULK_SIZE\"", String.valueOf(bulkSize));
- for (Map.Entry<Keys, String> e : names.entrySet()) {
- requestBody = requestBody.replace(e.getKey().name(), e.getValue());
- }
- MsoResponseWrapper2 responseWrapper2 = callMsoForResponseWrapper(org.springframework.http.HttpMethod.POST, getCreateBulkUri(), requestBody);
- assertNotNull(responseWrapper2);
- return (List<String>)responseWrapper2.getEntity();
- }
-
- public class JobInfoChecker<Integer> implements Predicate<Integer> {
-
- private final RestTemplate restTemplate;
- private Set<JobStatus> expectedJobStatus;
- private ServiceInfo expectedServiceInfo;
- private final String jobId;
- private JobStatus lastStatus;
-
- public JobInfoChecker(RestTemplate restTemplate, Set<JobStatus> expectedJobStatus, String jobId, ServiceInfo expectedServiceInfo) {
- this.restTemplate = restTemplate;
- this.expectedJobStatus = expectedJobStatus;
- this.jobId = jobId;
- this.expectedServiceInfo = expectedServiceInfo;
- }
-
- public void setExpectedJobStatus(Set<JobStatus> expectedJobStatus) {
- this.expectedJobStatus = expectedJobStatus;
- }
-
- @Override
- public boolean test(Integer integer) {
- ResponseEntity<List<ServiceInfo>> serviceListResponse = serviceListCall();
- assertThat(serviceListResponse.getStatusCode(), CoreMatchers.equalTo(HttpStatus.OK));
- assertThat(serviceListResponse.getBody(), hasItem(new JobIdAndStatusMatcher(jobId)));
- ServiceInfo serviceInfoFromDB = serviceListResponse.getBody().stream()
- .filter(serviceInfo -> serviceInfo.jobId.equals(jobId))
- .findFirst().orElse(null);
- Assert.assertNotNull(serviceInfoFromDB);
- Assert.assertEquals(serviceInfoDataReflected(serviceInfoFromDB), serviceInfoDataReflected(expectedServiceInfo));
- assertTrue("actual service instance doesn't contain template service name:" + expectedServiceInfo.serviceInstanceName,
- serviceInfoFromDB.serviceInstanceName.contains(expectedServiceInfo.serviceInstanceName));
- if (serviceInfoFromDB.jobStatus==JobStatus.IN_PROGRESS || serviceInfoFromDB.jobStatus==JobStatus.COMPLETED) {
- assertTrue("actual service instance doesn't contain template service name and trailing numbers:" + expectedServiceInfo.serviceInstanceName,
- serviceInfoFromDB.serviceInstanceName.contains(expectedServiceInfo.serviceInstanceName+"_00"));
- }
-
- if (expectedServiceInfo.serviceInstanceId != null) {
- assertThat(serviceInfoFromDB.serviceInstanceId, is(expectedServiceInfo.serviceInstanceId));
- }
- lastStatus = serviceInfoFromDB.jobStatus;
- return expectedJobStatus.contains(serviceInfoFromDB.jobStatus);
- }
- }
-
- private ResponseEntity<List<ServiceInfo>> serviceListCall() {
- return restTemplate.exchange(
- getServiceInfoUrl(),
- org.springframework.http.HttpMethod.GET,
- null,
- new ParameterizedTypeReference<List<ServiceInfo>>() {});
- }
-
- //serialize fields except of fields we cannot know ahead of time
- private static String serviceInfoDataReflected(ServiceInfo service1) {
- return new ReflectionToStringBuilder(service1, ToStringStyle.SHORT_PREFIX_STYLE)
- .setExcludeFieldNames("jobStatus", "templateId", "statusModifiedDate", "createdBulkDate", "serviceInstanceId", "serviceInstanceName")
- .toString();
- }
-
@Test
public void errorResponseInGetStatusFromMso_getAuditStatusFromMso_errorMsgExistInAdditionalInfo(){
Map<Keys, String> names = generateNames();
ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>()
.add(new PresetGetSessionSlotCheckIntervalGet())
.add(new PresetAAIGetSubscribersGet())
- .add(new PresetAAISearchNodeQueryEmptyResult())
- .add(new PresetMSOAssignServiceInstanceGen2WithNames(names, 1))
+ .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN3_TO_ATT_SABABA)
+ .add(new PresetMSOAssignServiceInstanceGen2WithNames(names, 0))
.add(new PresetMSOOrchestrationRequestGetErrorResponse(406))
.build();
@@ -516,4 +272,97 @@ public class AsyncInstantiationApiTest extends BaseMsoApiTest {
}
+ @Test
+ public void inProgressJobMoreThan24HoursIsFailedInVidAudit(){
+ addBulkPendingWithCustomList(Collections.singletonList(new PresetMSOOrchestrationRequestGet("IN_PROGRESS",24)));
+
+ AtomicReference<ServiceInfo> inProgressJob = new AtomicReference<>();
+ boolean isJobFound = Wait.waitFor(x->{
+ List<ServiceInfo> serviceInfoList = serviceListCall().getBody();
+ inProgressJob.set(serviceInfoList.stream().
+ filter(serviceInfo -> serviceInfo.serviceInstanceId.equals(PresetMSOOrchestrationRequestGet.DEFAULT_SERVICE_INSTANCE_ID) && serviceInfo.jobStatus.equals(JobStatus.FAILED))
+ .findFirst()
+ .orElse(null));
+ return inProgressJob.get() != null;
+ }, null, 15, 1);
+
+ org.junit.Assert.assertTrue("Job with DEFAULT_SERVICE_INSTANCE_ID and status FAILED should present", isJobFound);
+
+ verifyAuditStatuses(inProgressJob.get().jobId, Arrays.asList(JobStatus.PENDING.name(), JobStatus.IN_PROGRESS.name(),JobStatus.FAILED.name()), JobAuditStatus.SourceStatus.VID);
+ verifyAuditStatuses(inProgressJob.get().jobId, Arrays.asList("REQUESTED", "IN_PROGRESS"), JobAuditStatus.SourceStatus.MSO);
+ }
+
+ @Test
+ public void inProgressJobLessThan24HoursIsStillInProgressInVidAudit(){
+ addBulkPendingWithCustomList(Collections.singletonList(new PresetMSOOrchestrationRequestGet("IN_PROGRESS",23)));
+
+ AtomicReference<ServiceInfo> inProgressJob = new AtomicReference<>();
+ boolean isJobFound = Wait.waitFor(x->{
+ List<ServiceInfo> serviceInfoList = serviceListCall().getBody();
+ inProgressJob.set(serviceInfoList.stream().filter(serviceInfo -> serviceInfo.serviceInstanceId.equals(PresetMSOOrchestrationRequestGet.DEFAULT_SERVICE_INSTANCE_ID))
+ .findFirst()
+ .orElse(null));
+ return inProgressJob.get() != null;
+ }, null, 15, 1);
+
+ org.junit.Assert.assertTrue("Job with DEFAULT_SERVICE_INSTANCE_ID should present", isJobFound);
+ org.junit.Assert.assertEquals("Tested job status is not as expected", JobStatus.IN_PROGRESS, inProgressJob.get().getJobStatus());
+
+ verifyAuditStatuses(inProgressJob.get().jobId, Arrays.asList(JobStatus.PENDING.name(), JobStatus.IN_PROGRESS.name()), JobAuditStatus.SourceStatus.VID);
+ verifyAuditStatuses(inProgressJob.get().jobId, Arrays.asList("REQUESTED", "IN_PROGRESS"), JobAuditStatus.SourceStatus.MSO);
+ }
+
+ @Test
+ public void verifyAuditStatusOfInstanceGroupId(){
+ SimulatorApi.registerExpectationFromPreset(new PresetMSOOrchestrationRequestsManyInstanceStatusesGet(INSTANCE_GROUP_ID_LABEL, INSTANCE_GROUP_LABEL), SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET);
+ final List<JobAuditStatus> expectedAuditStatusList = getAuditStatusesForInstance("VNFGROUP", "df305d54-75b4-431b-adb2-eb6b9e5460df");
+ verifyInstanceAuditStatuses(Arrays.asList(
+ new JobAuditStatus("groupTestName", "IN_PROGRESS", UUID.fromString("28502bd2-3aff-4a03-9f2b-5a0d1cb1ca24") , INSTANCE_GROUP_LABEL+" instance creation", null, INSTANCE_GROUP_LABEL),
+ new JobAuditStatus("groupTestName", "COMPLETE",UUID.fromString("28502bd2-3aff-4a03-9f2b-5a0d1cb1ca24") , INSTANCE_GROUP_LABEL+" instance creation", null, INSTANCE_GROUP_LABEL),
+ new JobAuditStatus("groupTestName", "IN_PROGRESS", UUID.fromString("f711f0ff-24b6-4d7f-9314-4b4eae15f48c") , INSTANCE_GROUP_LABEL+" instance deletion", null, INSTANCE_GROUP_LABEL),
+ new JobAuditStatus("groupTestName", "COMPLETE",UUID.fromString("f711f0ff-24b6-4d7f-9314-4b4eae15f48c") , INSTANCE_GROUP_LABEL+" instance deletion", null, INSTANCE_GROUP_LABEL)),
+ expectedAuditStatusList);
+ }
+
+ @Test(expectedExceptions = HttpClientErrorException.class)
+ public void verifyAuditStatusOfInstanceGroupId_notExistingVidType(){
+ try {
+ getAuditStatusesForInstance("KUKU", "df305d54-75b4-431b-adb2-eb6b9e5460df");
+ } catch (HttpClientErrorException e){ //to verify the properiatary statusCode field
+ assertThat("Code is not as expected", HttpStatus.BAD_REQUEST.equals(e.getStatusCode()));
+ throw e;
+ }
+ }
+
+ @Test(expectedExceptions = HttpServerErrorException.class)
+ public void verifyAuditStatusOfInstanceGroupId_notExistingMsoInstanceId(){
+ try {
+ getAuditStatusesForInstance("VNFGROUP", "df305d54-75b4-431b-adb2-eb6b9e5460aa");
+ } catch (HttpServerErrorException e){ //to verify the properiatary statusCode field
+ assertThat("Code is not as expected", HttpStatus.INTERNAL_SERVER_ERROR.equals(e.getStatusCode()));
+ throw e;
+ }
+ }
+
+ @DataProvider
+ public static Object[][] macroAndALaCarteBulk(){
+ return new Object[][]{{CREATE_BULK_OF_MACRO_REQUEST}, {CREATE_BULK_OF_ALACARTE_REQUEST_WITH_VNF}};
+ }
+
+ @Test(dataProvider = "macroAndALaCarteBulk", expectedExceptions = HttpClientErrorException.class)
+ @FeatureTogglingTest(FLAG_1906_INSTANTIATION_API_USER_VALIDATION)
+ public void verifyCreateBulkOfInstancesUserPermissionValidation(String requestDetailsFileName) {
+ login(new UserCredentials("mo57174000", "mo57174000", null, null, null));
+ try {
+ createBulkOfInstances(false, 1, Collections.EMPTY_MAP, requestDetailsFileName);
+ } catch (HttpClientErrorException e){
+ assertEquals("Code is not as expected", HttpStatus.FORBIDDEN.value(), e.getStatusCode().value());
+ throw e;
+ }
+ finally {
+ login();
+ }
+
+ }
+
}
diff --git a/vid-automation/src/test/java/org/onap/vid/api/BaseApiAaiTest.java b/vid-automation/src/test/java/org/onap/vid/api/BaseApiAaiTest.java
index 69a6f66cc..4ac38a0e7 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/BaseApiAaiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/BaseApiAaiTest.java
@@ -15,9 +15,9 @@ import java.net.URI;
import java.net.URISyntaxException;
import static net.javacrumbs.jsonunit.JsonMatchers.jsonStringEquals;
-import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.either;
import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
import static vid.automation.test.services.SimulatorApi.registerExpectation;
/**
diff --git a/vid-automation/src/test/java/org/onap/vid/api/BaseApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/BaseApiTest.java
deleted file mode 100644
index e7c6045a4..000000000
--- a/vid-automation/src/test/java/org/onap/vid/api/BaseApiTest.java
+++ /dev/null
@@ -1,203 +0,0 @@
-package org.onap.vid.api;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.google.common.primitives.Ints;
-import org.apache.commons.io.IOUtils;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.SerializationConfig;
-import org.glassfish.jersey.client.ClientProperties;
-import org.glassfish.jersey.uri.internal.JerseyUriBuilder;
-import org.openecomp.sdc.ci.tests.datatypes.UserCredentials;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.client.ClientHttpRequestInterceptor;
-import org.springframework.http.client.ClientHttpResponse;
-import org.springframework.web.client.DefaultResponseErrorHandler;
-import org.springframework.web.client.RestTemplate;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import vid.automation.test.infra.FeaturesTogglingConfiguration;
-import vid.automation.test.services.UsersService;
-import vid.automation.test.utils.CookieAndJsonHttpHeadersInterceptor;
-
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URL;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.List;
-import java.util.Properties;
-import java.util.Random;
-
-import static java.util.Collections.singletonList;
-import static org.apache.commons.text.StringEscapeUtils.unescapeJson;
-import static org.hamcrest.CoreMatchers.everyItem;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.greaterThan;
-
-public class BaseApiTest {
- protected static final Logger LOGGER = LogManager.getLogger(BaseApiTest.class);
-
- @SuppressWarnings("WeakerAccess")
- protected URI uri;
- @SuppressWarnings("WeakerAccess")
- protected ObjectMapper objectMapper = new ObjectMapper();
- @SuppressWarnings("WeakerAccess")
- protected Client client;
- protected Random random;
- protected final RestTemplate restTemplate = new RestTemplate();
-
- protected final UsersService usersService = new UsersService();
- protected final RestTemplate restTemplateErrorAgnostic = new RestTemplate();
-
- @BeforeClass
- public void init() {
- uri = getUri();
- objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
- client = ClientBuilder.newClient();
- client.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
- random = new Random(System.currentTimeMillis());
- FeaturesTogglingConfiguration.initializeFeatureManager();
- }
-
- private URI getUri() {
- String host = System.getProperty("VID_HOST", "127.0.0.1");
- Integer port = Integer.valueOf(System.getProperty("VID_PORT", "8080"));
- return new JerseyUriBuilder().host(host).port(port).scheme("http").path("vid").build();
- }
-
- public void login() {
- UserCredentials userCredentials = getUserCredentials();
- final List<ClientHttpRequestInterceptor> interceptors = singletonList(new CookieAndJsonHttpHeadersInterceptor(getUri(), userCredentials));
- restTemplate.setInterceptors(interceptors);
-
- restTemplateErrorAgnostic.setInterceptors(interceptors);
- restTemplateErrorAgnostic.setErrorHandler(new DefaultResponseErrorHandler() {
- @Override
- public boolean hasError(ClientHttpResponse response) {
- return false;
- }
- });
- }
-
-
- static class DB_CONFIG {
- static String url = String.format("jdbc:mariadb://%s:%d/vid_portal",
- System.getProperty("DB_HOST", System.getProperty("VID_HOST", "127.0.0.1")),
- Integer.valueOf(System.getProperty("DB_PORT", "3306"))
- );
- static String username = "euser";
- static String password = "euser";
-
- static final int userId = 2222;
- static final String loginId = "vid1";
- static final int roleId = 2222221;
- static final int logRoleId = 2222222;
- }
-
-
- @BeforeClass
- protected void createNewTestUser() {
-
- deleteNewTestUser();
-
- LOGGER.debug("Connecting database...");
-
- try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
-
- LOGGER.debug("Database connected!");
- //create new user with specific role
- Statement stmt = connection.createStatement();
- stmt.addBatch("INSERT INTO `fn_user` (`USER_ID`, `ORG_USER_ID`, `LOGIN_ID`, `LOGIN_PWD`) VALUES (" + DB_CONFIG.userId + ", 'Porfirio Gerhardt', '" + DB_CONFIG.loginId + "', '" + DB_CONFIG.loginId + "')");
- stmt.addBatch("INSERT INTO `fn_role` (`ROLE_ID`, `ROLE_NAME`, `ACTIVE_YN`, `PRIORITY`) VALUES (" + DB_CONFIG.roleId + ", 'PACKET CORE___vFlowLogic', 'Y', 5)");
- stmt.addBatch("INSERT INTO `fn_role` (`ROLE_ID`, `ROLE_NAME`, `ACTIVE_YN`, `PRIORITY`) VALUES (" + DB_CONFIG.logRoleId + ", 'READ___LOGS___PERMITTED', 'Y', 5)");
- stmt.addBatch("INSERT INTO `fn_user_role` (`USER_ID`, `ROLE_ID`, `PRIORITY`, `APP_ID`) VALUES (" + DB_CONFIG.userId + ", " + DB_CONFIG.roleId + ", NULL, 1)");
- stmt.addBatch("INSERT INTO `fn_user_role` (`USER_ID`, `ROLE_ID`, `PRIORITY`, `APP_ID`) VALUES (" + DB_CONFIG.userId + ", " + DB_CONFIG.logRoleId + ", NULL, 1)");
-
-
- int[] executeBatch = stmt.executeBatch();
- assertThat(Ints.asList(executeBatch), everyItem(greaterThan(0)));
-
- } catch (SQLException e) {
- throw new IllegalStateException("Cannot connect the database!", e);
- }
-
- }
-
- @AfterClass
- protected void deleteNewTestUser() {
- LOGGER.debug("Connecting database...");
-
- try (Connection connection = DriverManager.getConnection(DB_CONFIG.url, DB_CONFIG.username, DB_CONFIG.password)) {
- LOGGER.debug("Database connected!");
- Statement stmt = connection.createStatement();
- stmt.addBatch("DELETE FROM `fn_user_role` WHERE `USER_ID` = " + DB_CONFIG.userId);
- stmt.addBatch("DELETE FROM `fn_user` WHERE `USER_ID` = " + DB_CONFIG.userId);
- stmt.addBatch("DELETE FROM `fn_role` WHERE `ROLE_ID` = " + DB_CONFIG.roleId);
- stmt.addBatch("DELETE FROM `fn_role` WHERE `ROLE_ID` = " + DB_CONFIG.logRoleId);
-
-
- int[] executeBatch = stmt.executeBatch();
-
- } catch (SQLException e) {
- throw new IllegalStateException("Cannot connect the database!", e);
- }
- }
-
- protected UserCredentials getUserCredentials() {
- final Properties configProp = new Properties();
- try {
- InputStream input = ClassLoader.getSystemResourceAsStream("test_config.properties");
- configProp.load(input);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
-
- HttpHeaders loginRequestHeaders = new HttpHeaders();
- loginRequestHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
- String loginId = configProp.getProperty("test.loginId", "i'm illegal");
- String loginPassword = configProp.getProperty("test.loginPassword", "i'm illegal");
- return new UserCredentials(loginId, loginPassword, null, null, null);
- }
-
-
-
-
- protected String getCleanJsonString(String jsonString) {
- // remove leading/trailing double-quotes and unescape
- String res = unescapeJson(jsonString.replaceAll("^\"|\"$", ""));
- LOGGER.debug("getCleanJsonString: " + jsonString + " ==> " + res);
- return res;
- }
-
- protected String getCleanJsonString(Object object) throws JsonProcessingException {
- if (object instanceof String) {
- return getCleanJsonString((String) object);
- } else {
- return new com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(object);
- }
- }
-
- protected String buildUri(String path) {
- return uri + "/" + path;
- }
-
- public static String getResourceAsString(String resourcePath) {
- // load expected result
- final URL resource = BaseApiTest.class.getClassLoader().getResource(resourcePath);
- if (resource == null) throw new RuntimeException("resource file not found: " + resourcePath);
- try {
- return IOUtils.toString(resource, "UTF-8");
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
-}
diff --git a/vid-automation/src/test/java/org/onap/vid/api/BaseMsoApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/BaseMsoApiTest.java
deleted file mode 100644
index 1495f1852..000000000
--- a/vid-automation/src/test/java/org/onap/vid/api/BaseMsoApiTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.onap.vid.api;
-
-import com.google.common.collect.ImmutableMap;
-import org.json.JSONException;
-import org.onap.vid.model.mso.MsoResponseWrapper2;
-import org.skyscreamer.jsonassert.JSONAssert;
-import org.skyscreamer.jsonassert.JSONCompareMode;
-import org.springframework.http.HttpMethod;
-import org.springframework.web.client.HttpClientErrorException;
-import org.springframework.web.client.HttpServerErrorException;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.DataProvider;
-import vid.automation.test.services.SimulatorApi;
-import vid.automation.test.services.SimulatorApi.RegistrationStrategy;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-public class BaseMsoApiTest extends BaseApiTest {
-
- @BeforeClass
- public void login() {
- super.login();
- }
-
- protected void callMsoWithSimulatedErrorResponse(String expectationJsonFileName, ImmutableMap<String, Object> replacementsForJson, String targetUri, String basicRequestBody, int expectedErrorCode, String expectedResult, HttpMethod method) throws IOException {
- SimulatorApi.registerExpectation(expectationJsonFileName, replacementsForJson, RegistrationStrategy.CLEAR_THEN_SET);
- try {
- MsoResponseWrapper2 responseWrapper = callMsoForResponseWrapper(method, targetUri, basicRequestBody);
-
- assertThat("Wrong propagated status from MSO", responseWrapper.getStatus(), is(expectedErrorCode));
- assertThat("Wrong propagated body from MSO", getCleanJsonString(responseWrapper.getEntity()), is(expectedResult));
- }catch(HttpClientErrorException | HttpServerErrorException e) {
- assertThat("Wrong propagated status from MSO", e.getStatusCode().value(), is(expectedErrorCode));
- }
- }
-
-
- protected void callMsoWithFineRequest(String expectationJsonFileName, ImmutableMap<String, Object> replacementsForJson, String targetUri, String requestBody, int expectedStatusCode, String expectedResult, HttpMethod method) throws IOException {
- SimulatorApi.registerExpectation(expectationJsonFileName, replacementsForJson, RegistrationStrategy.CLEAR_THEN_SET);
-
- MsoResponseWrapper2 responseWrapper = callMsoForResponseWrapper(method, targetUri, requestBody);
-
- assertThat("Wrong propagated status from MSO", responseWrapper.getStatus(), is(expectedStatusCode));
- try {
- JSONAssert.assertEquals("Wrong propagated body from MSO", expectedResult, getCleanJsonString(responseWrapper.getEntity()), JSONCompareMode.NON_EXTENSIBLE);
- } catch (JSONException e) {
- throw new RuntimeException(e);
- }
- }
-
- protected MsoResponseWrapper2 callMsoForResponseWrapper(HttpMethod method, String uri, String body) {
- MsoResponseWrapper2 responseWrapper;
- switch (method) {
- case POST:
- responseWrapper = restTemplate.postForObject(uri, body, MsoResponseWrapper2.class);
- break;
- case GET:
- default:
- responseWrapper = restTemplate.getForObject(uri, MsoResponseWrapper2.class);
- break;
- }
-
- System.out.println("response: " + responseWrapper);
-
- return responseWrapper;
- }
-
- @DataProvider
- public static Object[][] errorCodes(Method test) {
- return new Object[][]{
- {500},{505}, {400}, {401}, {404}, {405}
- };
- }
-}
diff --git a/vid-automation/src/test/java/org/onap/vid/api/CategoryParametersApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/CategoryParametersApiTest.java
index 54df0e83e..c04d2ff0d 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/CategoryParametersApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/CategoryParametersApiTest.java
@@ -17,6 +17,7 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.IOException;
import java.util.List;
+import java.util.Random;
import java.util.UUID;
import java.util.stream.Collectors;
diff --git a/vid-automation/src/test/java/org/onap/vid/api/ChangeManagementApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/ChangeManagementApiTest.java
index 2ad68d75d..999b66cee 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/ChangeManagementApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/ChangeManagementApiTest.java
@@ -3,35 +3,27 @@ package org.onap.vid.api;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
-import org.onap.vid.model.mso.ChangeManagementRequest;
-import org.onap.vid.model.mso.ChangeManagementRequestDetails;
-import org.onap.vid.model.mso.CloudConfiguration;
-import org.onap.vid.model.mso.MsoExceptionResponse;
-import org.onap.vid.model.mso.MsoResponseWrapper2;
-import org.onap.vid.model.mso.RelatedInstance;
-import org.onap.vid.model.mso.RelatedInstanceList;
-import org.onap.vid.model.mso.RequestInfo;
-import org.onap.vid.model.mso.RequestParameters;
-import org.onap.vid.model.workflow.GetVnfWorkflowRelationRequest;
-import org.onap.vid.model.workflow.GetWorkflowsResponse;
-import org.onap.vid.model.workflow.VnfDetails;
-import org.onap.vid.model.workflow.VnfDetailsWithWorkflows;
-import org.onap.vid.model.workflow.VnfWorkflowRelationAllResponse;
-import org.onap.vid.model.workflow.VnfWorkflowRelationRequest;
-import org.onap.vid.model.workflow.VnfWorkflowRelationResponse;
-import org.onap.vid.model.workflow.WorkflowsDetail;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
+import org.onap.simulator.presetGenerator.presets.mso.changeManagement.PresetMsoChangeManagementBase;
+import org.onap.simulator.presetGenerator.presets.mso.changeManagement.PresetMsoVnfInPlaceSoftwareUpdate;
+import org.onap.simulator.presetGenerator.presets.mso.changeManagement.PresetMsoVnfReplace;
+import org.onap.simulator.presetGenerator.presets.mso.changeManagement.PresetMsoVnfUpdate;
+import org.onap.simulator.presetGenerator.presets.aaf.*;
import org.onap.vid.model.mso.*;
import org.onap.vid.model.workflow.*;
import org.springframework.http.HttpStatus;
import org.springframework.util.StopWatch;
import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import vid.automation.test.services.SimulatorApi;
import vid.automation.test.services.SimulatorApi.RegistrationStrategy;
+import vid.automation.test.utils.ReadFile;
import javax.ws.rs.HttpMethod;
import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
@@ -51,6 +43,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.onap.vid.api.TestUtils.getNestedPropertyInMap;
+import static org.testng.AssertJUnit.assertEquals;
//This is integration test that require running tomcat
@@ -139,6 +132,30 @@ public class ChangeManagementApiTest extends BaseApiTest {
};
}
+ @DataProvider
+ public static Object[][] credentialsFilterTestData(Method test) {
+ return new Object[][]{
+ {AAFGetBasicAuthPreset.VALID_AUTH_VALUE, 200},
+// {null, 401}, // No auth header TODO: Uncomment when the bug in epsdk will be fixed. Currently If there is no auth header then no credentials validation.
+ {"xyz", 401}, //undecodable value
+ {"YUBiLmM6ZGVm", 401} //decodable value but not that expected by cadi filter (simulator)
+
+ };
+ }
+
+ @BeforeClass
+ public static void commonSimulatorRegistration() {
+ SimulatorApi.registerExpectationFromPreset(
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MDT1_TO_ATT_NC,
+ RegistrationStrategy.CLEAR_THEN_SET);
+ SimulatorApi.registerExpectationFromPreset(
+ new AAFGetUrlServicePreset(),
+ RegistrationStrategy.APPEND);
+ SimulatorApi.registerExpectationFromPreset(
+ new AAFGetBasicAuthPreset(),
+ RegistrationStrategy.APPEND);
+ }
+
// IN_PLACE_SOFTWARE_UPDATE
@Test
public void testInPlaceSoftwareUpdateHappyPath() throws IOException {
@@ -199,6 +216,12 @@ public class ChangeManagementApiTest extends BaseApiTest {
"mso_in_place_software_update_ok.json",
ImmutableMap.of("SERVICE_INSTANCE_ID", vnfIds.serviceInstanceId, "VNF_INSTANCE_ID", vnfIds.vnfInstanceId),
RegistrationStrategy.APPEND);
+ SimulatorApi.registerExpectationFromPreset(
+ new AAFGetUrlServicePreset(),
+ RegistrationStrategy.APPEND);
+ SimulatorApi.registerExpectationFromPreset(
+ new AAFGetBasicAuthPreset(),
+ RegistrationStrategy.APPEND);
return null;
}))
.collect(Collectors.toList());
@@ -216,9 +239,8 @@ public class ChangeManagementApiTest extends BaseApiTest {
stopWatch.start("init requests");
List<ChangeManagementRequest> requestsList = vnfList.stream().map(vnfIds -> this.createChangeManagementRequest(vnfIds, ChangeManagementRequest.VNF_IN_PLACE_SOFTWARE_UPDATE)).collect(Collectors.toList());
- WebTarget webTarget = client.target(uri).
- path(CHANGE_MANAGEMENT+WORKFLOW).resolveTemplate("vnfname","VidVnf");
- List<Callable<Response>> callables = requestsList.stream().map(request->((Callable<Response>) () -> webTarget.request(MediaType.APPLICATION_JSON_TYPE).header("Authorization", "Basic 123==").post(Entity.json(request)))).collect(Collectors.toList());
+ WebTarget webTarget = buildWebTarget("VidVnf");
+ List<Callable<Response>> callables = requestsList.stream().map(request->((Callable<Response>) () -> webTarget.request(MediaType.APPLICATION_JSON_TYPE).header("Authorization", "Basic " + AAFGetBasicAuthPreset.VALID_AUTH_VALUE).post(Entity.json(request)))).collect(Collectors.toList());
stopWatch.stop();
stopWatch.start("invoke calling to vid");
@@ -286,16 +308,54 @@ public class ChangeManagementApiTest extends BaseApiTest {
testChangeManagementGoodPayload(payload, "mso_config_update_ok.json", ChangeManagementRequest.CONFIG_UPDATE);
}
- @Test
- public void testClientCredentialsFilter_expect401()
+ @Test(dataProvider = "credentialsFilterTestData")
+ public void testCadiCredentialsFilter(String authValue, int expectedStatusCode)
{
VnfIds vnfIds = new VnfIds();
ChangeManagementRequest changeManagementRequest = createBasicChangeManagementRequest(vnfIds);
changeManagementRequest.setRequestType(ChangeManagementRequest.REPLACE);
- WebTarget webTarget = client.target(uri).
- path(CHANGE_MANAGEMENT + WORKFLOW).resolveTemplate("vnfname", vnfIds.vnfName);
+ WebTarget webTarget = buildWebTarget(vnfIds.vnfName);
Entity entity = Entity.json(changeManagementRequest);
- Assert.assertEquals(401, webTarget.request(MediaType.APPLICATION_JSON_TYPE).post(entity).getStatus());
+ Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON_TYPE);
+ if (authValue != null) {
+ invocationBuilder.header("Authorization", "Basic " + authValue);
+ }
+ Response response = invocationBuilder.post(entity);
+ String body = response.readEntity(String.class);
+ Assert.assertEquals(response.getStatus(), expectedStatusCode, "Full response: " + body);
+ }
+
+ @DataProvider
+ public static Object[][] requestFromSchedulerDataProvider(Method test) {
+ return new Object[][]{
+ {
+ "e9181708-f105-4dfd-9a36-0e089faa72ba",
+ new PresetMsoVnfReplace("254583ad-b38c-498b-bdbd-b8de5e07541b", "e9181708-f105-4dfd-9a36-0e089faa72ba"),
+ "changeManagement/vnfReplaceRequest.json"
+ },
+ {
+ "c929b7ec-cc9d-11e8-a8d5-f2801f1b9fd1",
+ new PresetMsoVnfUpdate("d0c59d4a-cc9d-11e8-a8d5-f2801f1b9fd1","c929b7ec-cc9d-11e8-a8d5-f2801f1b9fd1"),
+ "changeManagement/vnfUpdateRequest.json"
+ },
+ {
+ "e5403738-da34-4090-8864-ba9cf1bcdd88",
+ new PresetMsoVnfInPlaceSoftwareUpdate("12709275-787c-4be7-8c9c-fce64ab7ca8c","e5403738-da34-4090-8864-ba9cf1bcdd88"),
+ "changeManagement/vnfInPlaceSoftwareUpdate.json"
+ }
+ };
+ }
+
+ @Test(dataProvider = "requestFromSchedulerDataProvider")
+ public void whenGetFromSchedulerRequest_sendAsExpectedToMso(String vnfInstanceId, PresetMsoChangeManagementBase preset, String requestPath) {
+ SimulatorApi.registerExpectationFromPreset(
+ preset,
+ RegistrationStrategy.APPEND);
+ String schedulerRequest = ReadFile.loadResourceAsString(requestPath);
+ Response response = callChangeManagement("VidVnf", Entity.json(schedulerRequest));
+ MsoResponseWrapper2 body = response.readEntity(MsoResponseWrapper2.class);
+ assertEquals(202, body.getStatus());
+ assertEquals(vnfInstanceId, getNestedPropertyInMap(body.getEntity(), "requestReferences/instanceId"));
}
@@ -308,7 +368,7 @@ public class ChangeManagementApiTest extends BaseApiTest {
private void assertForHappyPath(VnfIds vnfIds, MsoResponseWrapper2 body, String requestType) {
Assert.assertEquals(body.getStatus(), 202, requestType + " failed with wrong http status");
Assert.assertEquals(
- TestUtils.getNestedPropertyInMap(body.getEntity(), "requestReferences/instanceId"),
+ getNestedPropertyInMap(body.getEntity(), "requestReferences/instanceId"),
vnfIds.serviceInstanceId,
String.format("Failed to find instanceId: %s in " + requestType + " response. Actual body:%s",
vnfIds.serviceInstanceId, body.getEntity()));
@@ -317,18 +377,25 @@ public class ChangeManagementApiTest extends BaseApiTest {
private <T> T callChangeManagementUpdate(VnfIds vnfIds, String expectationPath, Class<T> responseClass, String requestType) {
SimulatorApi.registerExpectation(
expectationPath,
- ImmutableMap.of("SERVICE_INSTANCE_ID", vnfIds.serviceInstanceId, "VNF_INSTANCE_ID", vnfIds.vnfInstanceId), RegistrationStrategy.CLEAR_THEN_SET);
+ ImmutableMap.of("SERVICE_INSTANCE_ID", vnfIds.serviceInstanceId, "VNF_INSTANCE_ID", vnfIds.vnfInstanceId), RegistrationStrategy.APPEND);
ChangeManagementRequest changeManagementRequest = createChangeManagementRequest(vnfIds, requestType);
Response response = callChangeManagementUpdate(vnfIds, changeManagementRequest);
return response.readEntity(responseClass);
}
private Response callChangeManagementUpdate(VnfIds vnfIds, ChangeManagementRequest changeManagementRequest) {
- WebTarget webTarget = client.target(uri).
- path(CHANGE_MANAGEMENT + WORKFLOW).resolveTemplate("vnfname", vnfIds.vnfName);
Entity entity = Entity.json(changeManagementRequest);
- Response response = webTarget.request(MediaType.APPLICATION_JSON_TYPE).header("Authorization", "Basic 123==").post(entity);
- return response;
+ return callChangeManagement(vnfIds.vnfName, entity);
+ }
+
+ private Response callChangeManagement(String vnfName, Entity entity) {
+ WebTarget webTarget = buildWebTarget(vnfName);
+ return webTarget.request(MediaType.APPLICATION_JSON_TYPE).header("Authorization", "Basic " + AAFGetBasicAuthPreset.VALID_AUTH_VALUE).post(entity);
+ }
+
+ private WebTarget buildWebTarget(String vnfName) {
+ return client.target(uri).
+ path(CHANGE_MANAGEMENT + WORKFLOW).resolveTemplate("vnfname", vnfName);
}
private void testChangeManagement409Error(String expectationPath, String requestType) throws IOException {
@@ -336,13 +403,13 @@ public class ChangeManagementApiTest extends BaseApiTest {
MsoResponseWrapper2 body = callChangeManagementUpdate(vnfIds, expectationPath, MsoResponseWrapper2.class, requestType);
Assert.assertEquals(body.getStatus(), 409, requestType + " failed with wrong http status");
Assert.assertEquals(
- TestUtils.getNestedPropertyInMap(body.getEntity(), "serviceException/messageId"),
+ getNestedPropertyInMap(body.getEntity(), "serviceException/messageId"),
"SVC2000",
String.format("Failed to find messageId: %s in " + requestType + " response. Actual body:%s",
"SVC2000", body.getEntity()));
- assertThat(TestUtils.getNestedPropertyInMap(body.getEntity(), "serviceException/text"), containsString(vnfIds.vnfInstanceId));
+ assertThat(getNestedPropertyInMap(body.getEntity(), "serviceException/text"), containsString(vnfIds.vnfInstanceId));
}
private void testChangeManagement404Error(String expectationPath, String requestType) throws IOException {
@@ -398,7 +465,7 @@ public class ChangeManagementApiTest extends BaseApiTest {
VnfIds vnfIds = new VnfIds();
SimulatorApi.registerExpectation(
expectationFileName,
- ImmutableMap.of("SERVICE_INSTANCE_ID", vnfIds.serviceInstanceId, "VNF_INSTANCE_ID", vnfIds.vnfInstanceId), RegistrationStrategy.CLEAR_THEN_SET);
+ ImmutableMap.of("SERVICE_INSTANCE_ID", vnfIds.serviceInstanceId, "VNF_INSTANCE_ID", vnfIds.vnfInstanceId), RegistrationStrategy.APPEND);
ChangeManagementRequest changeManagementRequest = createChangeManagementRequest(vnfIds, requestType);
changeManagementRequest.getRequestDetails().get(0).getRequestParameters().getAdditionalProperties().put("payload",payload);
Response response = callChangeManagementUpdate(vnfIds, changeManagementRequest);
diff --git a/vid-automation/src/test/java/org/onap/vid/api/OperationalEnvironmentControllerApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/OperationalEnvironmentControllerApiTest.java
index e5df2d3b9..222b0f5fb 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/OperationalEnvironmentControllerApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/OperationalEnvironmentControllerApiTest.java
@@ -22,8 +22,8 @@ import java.util.LinkedList;
import java.util.stream.Collectors;
import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
import static org.springframework.http.HttpStatus.BAD_REQUEST;
import static org.springframework.http.HttpStatus.METHOD_NOT_ALLOWED;
diff --git a/vid-automation/src/test/java/org/onap/vid/api/ProbeApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/ProbeApiTest.java
index 931f0004a..e38617b39 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/ProbeApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/ProbeApiTest.java
@@ -1,12 +1,31 @@
package org.onap.vid.api;
+import static org.hamcrest.CoreMatchers.anyOf;
+import static org.hamcrest.CoreMatchers.both;
+import static org.hamcrest.CoreMatchers.endsWith;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.startsWith;
+import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
+
+import com.google.common.collect.ImmutableList;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
-import org.hamcrest.MatcherAssert;
import org.junit.Assert;
import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGetInvalidResponse;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestsManyStatusesGet;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestsManyStatusesInvalidResponseGet;
+import org.onap.simulator.presetGenerator.presets.scheduler.PresetGetSchedulerChangeManagementInvalidResponse;
+import org.onap.simulator.presetGenerator.presets.scheduler.PresetGetSchedulerChangeManagements;
+import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
+import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGetEmptyResult;
+import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGetInvalidResponse;
import org.onap.vid.model.probe.ExternalComponentStatus;
import org.onap.vid.model.probe.HttpRequestMetadata;
import org.springframework.core.ParameterizedTypeReference;
@@ -17,14 +36,13 @@ import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import vid.automation.test.services.SimulatorApi;
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.Optional;
+public class ProbeApiTest extends BaseApiTest {
-import static org.hamcrest.CoreMatchers.*;
-import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
+ private static final String MSO_QUERY_PARAMS = "filter=requestExecutionDate:EQUALS:01-01-2100";
+ private static final String AAI_QUERY_PARMAS = "business/customers?subscriber-type=INFRA&depth=0";
+ private static final String SDC_PATH_PARAMS = "46401eec-35bd-4e96-ad0d-0356ff6b8c8d/toscaModel";
+ private static final String SCHEDULER_PATH = "http://localhost:1080/scheduler/v1/ChangeManagement/schedules/scheduleDetails/";
-public class ProbeApiTest extends BaseApiTest {
@BeforeClass
public void login() {
@@ -35,70 +53,183 @@ public class ProbeApiTest extends BaseApiTest {
public static Object[][] probePresetAndResponse(Method test) {
return new Object[][]{
{
- new PresetAAIGetSubscribersGet(),
- new ExternalComponentStatus(ExternalComponentStatus.Component.AAI,
- true,
- new HttpRequestMetadata(HttpMethod.GET,
- 200,
- "business/customers?subscriber-type=INFRA&depth=0",
- "{\"customer\":[{\"global-customer-id\":\"MSO_1610_ST\",\"subscriber-name\":\"MSO_1610_ST\",\"subscriber-type\":\"INFRA\",\"resource-version\":\"1494001902987\"},{\"global-customer-id\":\"21014aa2-526b-11e6-beb8-9e71128cae77\",\"subscriber-name\":\"PACKET CORE\",\"subscriber-type\":\"INFRA\",\"resource-version\":\"1494001776295\"},{\"global-customer-id\":\"DHV1707-TestSubscriber-2\",\"subscriber-name\":\"ICORE CORE\",\"subscriber-type\":\"INFRA\",\"resource-version\":\"1498751754450\"},{\"global-customer-id\":\"DHV1707-TestSubscriber-1\",\"subscriber",
- "OK"
+ "all good",
+ ImmutableList.of(
+ new PresetAAIGetSubscribersGet(),
+ new PresetMSOOrchestrationRequestsManyStatusesGet(),
+ new PresetSDCGetServiceToscaModelGet("46401eec-35bd-4e96-ad0d-0356ff6b8c8d", "serviceCreationTest.zip"),
+ new PresetGetSchedulerChangeManagements()
+ ),
+ ImmutableList.of(new ExternalComponentStatus(ExternalComponentStatus.Component.AAI,
+ true,
+ new HttpRequestMetadata(HttpMethod.GET,
+ 200,
+ AAI_QUERY_PARMAS,
+ "{\"customer\":[{\"global-customer-id\":\"CAR_2020_ER\",\"subscriber-name\":\"CAR_2020_ER\",\"subscriber-type\":\"INFRA\",\"resource-version\":\"1494001902987\",\"relationship-list\":null},{\"global-customer-id\":\"21014aa2-526b-11e6-beb8-9e71128cae77\",\"subscriber-name\":\"JULIO ERICKSON\",\"subscriber-type\":\"INFRA\",\"resource-version\":\"1494001776295\",\"relationship-list\":null},{\"global-customer-id\":\"DHV1707-TestSubscriber-2\",\"subscriber-name\":\"DALE BRIDGES\",\"subscriber-type\":\"INFRA\",\"resource-version\":\"1498751754450\",\"relationsh",
+ "OK"
+ )
+ ), new ExternalComponentStatus(ExternalComponentStatus.Component.MSO,
+ true,
+ new HttpRequestMetadata(HttpMethod.GET,
+ 200,
+ MSO_QUERY_PARAMS,
+ "{ " +
+ " \"requestList\": [{ " +
+ " \"request\": { " +
+ " \"requestId\": \"rq1234d1-5a33-55df-13ab-12abad84e333\", " +
+ " \"startTime\": \"Thu, 04 Jun 2009 02:51:59 GMT\", " +
+ " \"instanceReferences\": { " +
+ " \"serviceInstanceId\": \"bc305d54-75b4-431b-adb2-eb6b9e546014\" " +
+ " }, " +
+ " \"requestScope\": \"vnf\", " +
+ " \"requestType\": \"updateInstance\", " +
+ " \"requestDetails\": { " +
+ " \"modelInfo\": { " +
+ " \"modelType\": \"service\", " +
+ " \"modelInvariantId\": \"sn5256d1-5a33-55df-13ab-12abad84e764\", " +
+ " \"modelVersionId\": \"ab6478e4-ea33-3346-ac12-ab1",
+ "OK"
+ )
+ ), new ExternalComponentStatus(ExternalComponentStatus.Component.SDC,
+ true,
+ new HttpRequestMetadata(HttpMethod.GET,
+ 200,
+ SDC_PATH_PARAMS,
+ "",
+ "OK"
+ )
+ ), new ExternalComponentStatus(ExternalComponentStatus.Component.SCHEDULER,
+ true,
+ new HttpRequestMetadata(HttpMethod.GET,
+ 200,
+ SCHEDULER_PATH,
+ StringUtils.substring(new PresetGetSchedulerChangeManagements().getResponseBody().toString(), 0, 500),
+ "OK"
)
- )
+ ))
},
{
- new PresetAAIGetSubscribersGetInvalidResponse(200),
- new ExternalComponentStatus(ExternalComponentStatus.Component.AAI,
+ "invalid json",
+ ImmutableList.of(
+ new PresetAAIGetSubscribersGetInvalidResponse(200),
+ new PresetMSOOrchestrationRequestsManyStatusesInvalidResponseGet(200),
+ new PresetSDCGetServiceToscaModelGetEmptyResult("46401eec-35bd-4e96-ad0d-0356ff6b8c8d"),
+ new PresetGetSchedulerChangeManagementInvalidResponse(200)
+ ),
+ ImmutableList.of(new ExternalComponentStatus(ExternalComponentStatus.Component.AAI,
+ false,
+ new HttpRequestMetadata(HttpMethod.GET,
+ 200,
+ AAI_QUERY_PARMAS,
+ "this payload is an invalid json",
+ "com.fasterxml.jackson.core.JsonParseException"
+ )
+ ), new ExternalComponentStatus(ExternalComponentStatus.Component.MSO,
+ false,
+ new HttpRequestMetadata(HttpMethod.GET,
+ 200,
+ MSO_QUERY_PARAMS,
+ "this payload is an invalid json",
+ "com.fasterxml.jackson.core.JsonParseException"
+ )
+ ), new ExternalComponentStatus(ExternalComponentStatus.Component.SDC,
false,
new HttpRequestMetadata(HttpMethod.GET,
200,
- "business/customers?subscriber-type=INFRA&depth=0",
+ SDC_PATH_PARAMS,
+ "",
+ "error reading model 46401eec-35bd-4e96-ad0d-0356ff6b8c8d from SDC"
+ )
+ ), new ExternalComponentStatus(ExternalComponentStatus.Component.SCHEDULER,
+ false,
+ new HttpRequestMetadata(HttpMethod.GET,
+ 200,
+ SCHEDULER_PATH,
"this payload is an invalid json",
- "org.codehaus.jackson.JsonParseException"
+ "javax.ws.rs.ProcessingException"
)
- )
+ ))
},
{
- new PresetAAIGetSubscribersGetInvalidResponse(500),
- new ExternalComponentStatus(ExternalComponentStatus.Component.AAI,
+ "bad http code",
+ ImmutableList.of(
+ new PresetAAIGetSubscribersGetInvalidResponse(500),
+ new PresetMSOOrchestrationRequestsManyStatusesInvalidResponseGet(406),
+ new PresetSDCGetServiceToscaModelGetInvalidResponse("46401eec-35bd-4e96-ad0d-0356ff6b8c8d", 404),
+ new PresetGetSchedulerChangeManagementInvalidResponse(400)
+ ),
+ ImmutableList.of(new ExternalComponentStatus(ExternalComponentStatus.Component.AAI,
false,
new HttpRequestMetadata(HttpMethod.GET,
500,
- "business/customers?subscriber-type=INFRA&depth=0",
+ AAI_QUERY_PARMAS,
"this payload is an invalid json",
"No subscriber received"
)
- )
+ ), new ExternalComponentStatus(ExternalComponentStatus.Component.MSO,
+ false,
+ new HttpRequestMetadata(HttpMethod.GET,
+ 406,
+ MSO_QUERY_PARAMS,
+ "this payload is an invalid json",
+ "org.apache.http.HttpException: Get with status=406 (200 or 202 expected), url= http"
+ )
+ ), new ExternalComponentStatus(ExternalComponentStatus.Component.SDC,
+ false,
+ new HttpRequestMetadata(HttpMethod.GET,
+ 404,
+ SDC_PATH_PARAMS,
+ "simulated error description from sdc",
+ "model 46401eec-35bd-4e96-ad0d-0356ff6b8c8d not found in SDC" +
+ " (consider updating vid probe configuration 'probe.sdc.model.uuid')"
+ )
+ ), new ExternalComponentStatus(ExternalComponentStatus.Component.SCHEDULER,
+ false,
+ new HttpRequestMetadata(HttpMethod.GET,
+ 400,
+ SCHEDULER_PATH,
+ "this payload is an invalid json",
+ "org.apache.http.HttpException: Get with status = 400, url = " + SCHEDULER_PATH
+ )
+ ))
}
};
}
@Test(dataProvider = "probePresetAndResponse")
- public void probeRequest_returnsResponseAsExpected(BasePreset preset, ExternalComponentStatus expectedStatus ){
- SimulatorApi.registerExpectationFromPreset(preset, CLEAR_THEN_SET);
+ public void probeRequest_returnsResponseAsExpected(String desc, Collection<BasePreset> presets, Collection<ExternalComponentStatus> expectedStatuses) {
+ SimulatorApi.registerExpectationFromPresets(presets, CLEAR_THEN_SET);
ResponseEntity<List<ExternalComponentStatus>> response = restTemplate.exchange(
uri + "/probe",
org.springframework.http.HttpMethod.GET,
null,
- new ParameterizedTypeReference<List<ExternalComponentStatus>>() {});
+ new ParameterizedTypeReference<List<ExternalComponentStatus>>() {
+ });
List<ExternalComponentStatus> probeResults = response.getBody();
- Assert.assertEquals(probeResults.size(),1);
- assertAaiGetAllSubscribersAsExpected(probeResults,expectedStatus);
-
+ Assert.assertEquals(4, probeResults.size());
+ assertResultAsExpected(ExternalComponentStatus.Component.AAI, probeResults, expectedStatuses);
+ assertResultAsExpected(ExternalComponentStatus.Component.SDC, probeResults, expectedStatuses);
+ assertResultAsExpected(ExternalComponentStatus.Component.MSO, probeResults, expectedStatuses);
+ assertResultAsExpected(ExternalComponentStatus.Component.SCHEDULER, probeResults, expectedStatuses);
}
- private void assertAaiGetAllSubscribersAsExpected(List<ExternalComponentStatus> probeResults,ExternalComponentStatus expectedStatus){
- Optional<ExternalComponentStatus> aaiGetAllSubscribersResult = probeResults.stream().filter(x -> x.getComponent()== ExternalComponentStatus.Component.AAI).findFirst();
- Assert.assertTrue(aaiGetAllSubscribersResult.isPresent());
- ExternalComponentStatus aaiGetAllSubscribersStatus = aaiGetAllSubscribersResult.get();
- Assert.assertEquals(aaiGetAllSubscribersStatus.isAvailable(),expectedStatus.isAvailable());
+ private void assertResultAsExpected(ExternalComponentStatus.Component component, List<ExternalComponentStatus> probeResults, Collection<ExternalComponentStatus> expectedStatuses) {
+ ExternalComponentStatus expectedStatus = expectedStatuses.stream().filter(x -> x.getComponent() == component)
+ .findFirst().orElseThrow(() -> new AssertionError("Missing setup for " + component + " expected result"));
+ ExternalComponentStatus componentStatus = probeResults.stream().filter(x -> x.getComponent() == component)
+ .findFirst().orElseThrow(() -> new AssertionError(component.name()+" result not found in response"));
+
+ Assert.assertThat("wrong metadata for " + component, requestMetadataReflected(componentStatus.getMetadata()),
+ is(requestMetadataReflected(expectedStatus.getMetadata())));
- MatcherAssert.assertThat(requestMetadataReflected(aaiGetAllSubscribersStatus.getMetadata()),is(requestMetadataReflected(expectedStatus.getMetadata())));
- MatcherAssert.assertThat(aaiGetAllSubscribersStatus.getMetadata().getUrl(), both(endsWith(expectedStatus.getMetadata().getUrl())).and(startsWith("http")));
+ Assert.assertThat("wrong url for " + component, componentStatus.getMetadata().getUrl(),
+ both(endsWith(expectedStatus.getMetadata().getUrl())).and(startsWith("http")));
- MatcherAssert.assertThat(aaiGetAllSubscribersStatus.getMetadata().getDescription(),
+ Assert.assertThat("wrong description for " + component, componentStatus.getMetadata().getDescription(),
anyOf(equalTo(expectedStatus.getMetadata().getDescription()), startsWith(expectedStatus.getMetadata().getDescription())));
+
+ Assert.assertThat("wrong status for " + component, componentStatus.isAvailable(), is(expectedStatus.isAvailable()));
}
//serialize fields except of fields we cannot know ahead of time
diff --git a/vid-automation/src/test/java/org/onap/vid/api/SampleApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/SampleApiTest.java
index 2b78cdb91..9d7a08120 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/SampleApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/SampleApiTest.java
@@ -11,8 +11,9 @@ import vid.automation.test.services.SimulatorApi;
import java.io.IOException;
-import static org.hamcrest.MatcherAssert.assertThat;
+import static java.util.Collections.singletonList;
import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
public class SampleApiTest extends BaseApiTest {
diff --git a/vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java
index 0441da1d2..7735d59af 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java
@@ -1,5 +1,16 @@
package org.onap.vid.api;
+import static net.javacrumbs.jsonunit.JsonMatchers.jsonStringEquals;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNot.not;
+import static org.testng.Assert.assertFalse;
+import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND;
+import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
+import static vid.automation.test.services.SimulatorApi.registerExpectation;
+import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
+import static vid.automation.test.utils.ReadFile.loadResourceAsString;
+
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.collect.ImmutableList;
import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
@@ -11,22 +22,9 @@ import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import vid.automation.test.infra.FeatureTogglingTest;
import vid.automation.test.infra.Features;
-import java.io.IOException;
-import java.net.URISyntaxException;
-
-import static net.javacrumbs.jsonunit.JsonMatchers.jsonStringEquals;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.either;
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNot.not;
-import static org.testng.Assert.assertFalse;
-import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND;
-import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
-import static vid.automation.test.services.SimulatorApi.registerExpectation;
-import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
-
public class SdcApiTest extends BaseApiTest {
private static final String SDC_GET_SERVICE_MODEL = "/rest/models/services/";
@@ -35,17 +33,17 @@ public class SdcApiTest extends BaseApiTest {
private static final String A_LA_CARTE_INSTANTIATION_TYPE_UUID = "4d71990b-d8ad-4510-ac61-496288d9078e";
private static final String A_LA_CARTE_INSTANTIATION_TYPE_INVARIANT_UUID = "d27e42cf-087e-4d31-88ac-6c4b7585f800";
private static final String A_LA_CARTE_INSTANTIATION_TYPE_FILE_PATH = "csar15782222_instantiationTypeAlacarte_invariantUUIDMacro.zip";
- private static final String A_LA_CARTE_INSTANTIATION_TYPE_EXPECTED_RESPONSE = "{\"service\":{\"uuid\":\"4d71990b-d8ad-4510-ac61-496288d9078e\",\"invariantUuid\":\"d27e42cf-087e-4d31-88ac-6c4b7585f800\",\"name\":\"vidmacrofalsenaming\",\"version\":\"1.0\",\"toscaModelURL\":null,\"category\":\"Network L1-3\",\"serviceType\":\"\",\"serviceRole\":\"\",\"description\":\"vidmacrofalsenaming\",\"serviceEcompNaming\":\"false\",\"instantiationType\":\"A-La-Carte\",\"inputs\":{}},\"vnfs\":{},\"networks\":{\"MULTI_PROVIDER_PORT_GROUP 0\":{\"uuid\":\"e5d235de-2188-4f9f-a28c-fe38967883f2\",\"invariantUuid\":\"b0303003-0abb-454c-9119-8cbe2e09e003\",\"description\":\"Creates a neutron multi-provider VLAN network with dummy subnet\",\"name\":\"MULTI_PROVIDER_PORT_GROUP\",\"version\":\"1.0\",\"customizationUuid\":\"0fde4286-ee4c-439d-9556-74b6be6bbc42\",\"inputs\":{},\"commands\":{},\"properties\":{\"network_assignments\":\"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}\",\"network_flows\":\"{is_network_policy=false, is_bound_to_vpn=false}\",\"network_scope\":\"GLOBAL\",\"network_ecomp_naming\":\"{ecomp_generated_naming=true}\",\"network_type\":\"MULTI_PROVIDER_PORT_GROUP\",\"network_technology\":\"MULTI_GROUP\",\"network_homing\":\"{ecomp_selected_instance_node_target=false}\"},\"type\":\"VL\",\"modelCustomizationName\":\"MULTI_PROVIDER_PORT_GROUP 0\"}},\"collectionResource\":{},\"configurations\":{},\"serviceProxies\":{},\"vfModules\":{},\"volumeGroups\":{},\"pnfs\":{}}";
+ private static final String A_LA_CARTE_INSTANTIATION_TYPE_EXPECTED_RESPONSE = "sdcApiTest/aLaCarteInstantiationTypeResponse.json";
private static final String MACRO_INSTANTIATION_TYPE_FILE_PATH = "csar15782222_instantiationTypeMacro_invariantUUIDAlacarte.zip";
private static final String MACRO_INSTANTIATION_TYPE_UUID = "4d71990b-d8ad-4510-ac61-496288d9078e";
private static final String MACRO_INSTANTIATION_TYPE_INVARIANT_UUID = "a8dcd72d-d44d-44f2-aa85-53aa9ca99cba";
- private static final String MACRO_INSTANTIATION_TYPE_EXPECTED_RESPONSE = "{\"service\":{\"uuid\":\"4d71990b-d8ad-4510-ac61-496288d9078e\",\"invariantUuid\":\"a8dcd72d-d44d-44f2-aa85-53aa9ca99cba\",\"name\":\"vidmacrofalsenaming\",\"version\":\"1.0\",\"toscaModelURL\":null,\"category\":\"Network L1-3\",\"serviceType\":\"\",\"serviceRole\":\"\",\"description\":\"vidmacrofalsenaming\",\"serviceEcompNaming\":\"false\",\"instantiationType\":\"Macro\",\"inputs\":{}},\"vnfs\":{},\"networks\":{\"MULTI_PROVIDER_PORT_GROUP 0\":{\"uuid\":\"e5d235de-2188-4f9f-a28c-fe38967883f2\",\"invariantUuid\":\"b0303003-0abb-454c-9119-8cbe2e09e003\",\"description\":\"Creates a neutron multi-provider VLAN network with dummy subnet\",\"name\":\"MULTI_PROVIDER_PORT_GROUP\",\"version\":\"1.0\",\"customizationUuid\":\"0fde4286-ee4c-439d-9556-74b6be6bbc42\",\"inputs\":{},\"commands\":{},\"properties\":{\"network_assignments\":\"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}\",\"network_flows\":\"{is_network_policy=false, is_bound_to_vpn=false}\",\"network_scope\":\"GLOBAL\",\"network_ecomp_naming\":\"{ecomp_generated_naming=true}\",\"network_type\":\"MULTI_PROVIDER_PORT_GROUP\",\"network_technology\":\"MULTI_GROUP\",\"network_homing\":\"{ecomp_selected_instance_node_target=false}\"},\"type\":\"VL\",\"modelCustomizationName\":\"MULTI_PROVIDER_PORT_GROUP 0\"}},\"collectionResource\":{},\"configurations\":{},\"serviceProxies\":{},\"vfModules\":{},\"volumeGroups\":{},\"pnfs\":{}}";
+ private static final String MACRO_INSTANTIATION_TYPE_EXPECTED_RESPONSE = "sdcApiTest/macroInstantiationTypeResponse.json";
private static final String EMPTY_INSTANTIATION_TYPE_FILE_PATH = "csar15782222_instantiationTypeEmpty_invariantUUIDAlacarte.zip";
- private static final String EMPTY_INSTANTIATION_TYPE_EXPECTED_RESPONSE = "{\"service\":{\"uuid\":\"4d71990b-d8ad-4510-ac61-496288d9078e\",\"invariantUuid\":\"a8dcd72d-d44d-44f2-aa85-53aa9ca99cba\",\"name\":\"vidmacrofalsenaming\",\"version\":\"1.0\",\"toscaModelURL\":null,\"category\":\"Network L1-3\",\"serviceType\":\"\",\"serviceRole\":\"\",\"description\":\"vidmacrofalsenaming\",\"serviceEcompNaming\":\"false\",\"instantiationType\":\"ClientConfig\",\"inputs\":{}},\"vnfs\":{},\"networks\":{\"MULTI_PROVIDER_PORT_GROUP 0\":{\"uuid\":\"e5d235de-2188-4f9f-a28c-fe38967883f2\",\"invariantUuid\":\"b0303003-0abb-454c-9119-8cbe2e09e003\",\"description\":\"Creates a neutron multi-provider VLAN network with dummy subnet\",\"name\":\"MULTI_PROVIDER_PORT_GROUP\",\"version\":\"1.0\",\"customizationUuid\":\"0fde4286-ee4c-439d-9556-74b6be6bbc42\",\"inputs\":{},\"commands\":{},\"properties\":{\"network_assignments\":\"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}\",\"network_flows\":\"{is_network_policy=false, is_bound_to_vpn=false}\",\"network_scope\":\"GLOBAL\",\"network_ecomp_naming\":\"{ecomp_generated_naming=true}\",\"network_type\":\"MULTI_PROVIDER_PORT_GROUP\",\"network_technology\":\"MULTI_GROUP\",\"network_homing\":\"{ecomp_selected_instance_node_target=false}\"},\"type\":\"VL\",\"modelCustomizationName\":\"MULTI_PROVIDER_PORT_GROUP 0\"}},\"collectionResource\":{},\"configurations\":{},\"serviceProxies\":{},\"vfModules\":{},\"volumeGroups\":{},\"pnfs\":{}}";
+ private static final String EMPTY_INSTANTIATION_TYPE_EXPECTED_RESPONSE = "sdcApiTest/emptyInstantiationTypeResponse.json";
private static final String BOTH_INSTANTIATION_TYPE_FILE_PATH = "csar15782222_instantiationTypeBoth_invariantUUIDAlacarte.zip";
@@ -53,13 +51,15 @@ public class SdcApiTest extends BaseApiTest {
private static final String MIN_MAX_INITIAL_UUID = "43f13072-fe50-496b-b673-7af075d10143";
private static final String MIN_MAX_INITIAL_INVARIANT_UUID = "35fb95d8-d1f0-4e46-99ac-e01b423e8e3f";
private static final String MIN_MAX_INITIAL_FILE_PATH = "min_max_initial_vfModule_csar_v4.0.zip";
- private static final String MIN_MAX_INITIAL_EXPECTED_RESPONSE = "{\"service\":{\"uuid\":\"43f13072-fe50-496b-b673-7af075d10143\",\"invariantUuid\":\"35fb95d8-d1f0-4e46-99ac-e01b423e8e3f\",\"name\":\"ADIOD vMX VPE BV Service 488 test\",\"version\":\"1.0\",\"toscaModelURL\":null,\"category\":\"Network L1-3\",\"serviceType\":\"\",\"serviceRole\":\"\",\"description\":\"Model Creation for PID 291247b . OAM Network Service Name : ADIOD vPE Tenant OAM Network 1 SRIOV Network Service Name : vPE ADIOD Provider Net 1\",\"serviceEcompNaming\":\"true\",\"instantiationType\":\"ClientConfig\",\"inputs\":{\"2017488adiodvpe20_ASN\":{\"type\":\"string\",\"description\":\"AV/PE\",\"entry_schema\":null,\"inputProperties\":null,\"constraints\":[],\"required\":true,\"default\":\"AV_vPE\"},\"2017488adiodvpe20_bandwidth\":{\"type\":\"string\",\"description\":\"Requested VPE bandwidth\",\"entry_schema\":null,\"inputProperties\":null,\"constraints\":[],\"required\":true,\"default\":\"10\"},\"2017488adiodvpe20_bandwidth_units\":{\"type\":\"string\",\"description\":\"Units of bandwidth\",\"entry_schema\":null,\"inputProperties\":null,\"constraints\":[],\"required\":true,\"default\":\"Gbps\"},\"2017488adiodvpe20_AIC_CLLI\":{\"type\":\"string\",\"description\":\"AIC Site CLLI\",\"entry_schema\":null,\"inputProperties\":null,\"constraints\":[],\"required\":true,\"default\":\"ATLMY8GA\"},\"2017488adiodvpe20_vnf_config_template_version\":{\"type\":\"string\",\"description\":\"VPE Software Version\",\"entry_schema\":null,\"inputProperties\":null,\"constraints\":[],\"required\":true,\"default\":\"17.2\"},\"2017488adiodvpe20_vnf_instance_name\":{\"type\":\"string\",\"description\":\"The hostname assigned to the vpe.\",\"entry_schema\":null,\"inputProperties\":null,\"constraints\":[],\"required\":true,\"default\":\"mtnj309me6\"}}},\"vnfs\":{\"2017 488 ADIOD vPE 2 0\":{\"uuid\":\"079266b1-fcf5-44ae-bc04-cc3215b28737\",\"invariantUuid\":\"e2dcd546-e647-4854-9ed9-e0a4d6880636\",\"description\":\"Name ADIOD vPE Description The Provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release code 17.2 Owners Mary Fragale Updated 9-25-17 for version 8.0 of the VLM \",\"name\":\"2017 488 ADIOD vPE 2\",\"version\":\"4.0\",\"customizationUuid\":\"2b4e9125-b607-49a3-81c7-9260f8ca32f4\",\"inputs\":{\"vnf_config_template_version\":{\"type\":\"string\",\"description\":\"VPE Software Version\",\"entry_schema\":null,\"inputProperties\":null,\"constraints\":[],\"required\":true,\"default\":\"17.2\"},\"bandwidth_units\":{\"type\":\"string\",\"description\":\"Units of bandwidth\",\"entry_schema\":null,\"inputProperties\":null,\"constraints\":[],\"required\":true,\"default\":\"Gbps\"},\"bandwidth\":{\"type\":\"string\",\"description\":\"Requested VPE bandwidth\",\"entry_schema\":null,\"inputProperties\":null,\"constraints\":[],\"required\":true,\"default\":\"10\"},\"AIC_CLLI\":{\"type\":\"string\",\"description\":\"AIC Site CLLI\",\"entry_schema\":null,\"inputProperties\":null,\"constraints\":[],\"required\":true,\"default\":\"ATLMY8GA\"},\"ASN\":{\"type\":\"string\",\"description\":\"AV/PE\",\"entry_schema\":null,\"inputProperties\":null,\"constraints\":[],\"required\":true,\"default\":\"AV_vPE\"},\"vnf_instance_name\":{\"type\":\"string\",\"description\":\"The hostname assigned to the vpe.\",\"entry_schema\":null,\"inputProperties\":null,\"constraints\":[],\"required\":true,\"default\":\"mtnj309me6\"}},\"commands\":{\"vnf_config_template_version\":{\"displayName\":\"vnf_config_template_version\",\"command\":\"get_input\",\"inputName\":\"2017488adiodvpe20_vnf_config_template_version\"},\"bandwidth_units\":{\"displayName\":\"bandwidth_units\",\"command\":\"get_input\",\"inputName\":\"2017488adiodvpe20_bandwidth_units\"},\"bandwidth\":{\"displayName\":\"bandwidth\",\"command\":\"get_input\",\"inputName\":\"2017488adiodvpe20_bandwidth\"},\"AIC_CLLI\":{\"displayName\":\"AIC_CLLI\",\"command\":\"get_input\",\"inputName\":\"2017488adiodvpe20_AIC_CLLI\"},\"ASN\":{\"displayName\":\"ASN\",\"command\":\"get_input\",\"inputName\":\"2017488adiodvpe20_ASN\"},\"vnf_instance_name\":{\"displayName\":\"vnf_instance_name\",\"command\":\"get_input\",\"inputName\":\"2017488adiodvpe20_vnf_instance_name\"}},\"properties\":{\"vmxvre_retype\":\"RE-VMX\",\"vnf_config_template_version\":\"get_input:2017488adiodvpe20_vnf_config_template_version\",\"sriov44_net_id\":\"48d399b3-11ee-48a8-94d2-f0ea94d6be8d\",\"int_ctl_net_id\":\"2f323477-6936-4d01-ac53-d849430281d9\",\"vmxvpfe_sriov41_0_port_mac\":\"00:11:22:EF:AC:DF\",\"int_ctl_net_name\":\"VMX-INTXI\",\"vmx_int_ctl_prefix\":\"128.0.0.0\",\"sriov43_net_id\":\"da349ca1-6de9-4548-be88-2d88e99bfef5\",\"sriov42_net_id\":\"760669ba-013d-4d9b-b0e7-4151fe2e6279\",\"sriov41_net_id\":\"25ad52d5-c165-40f8-b3b0-ddfc2373280a\",\"nf_type\":\"vPE\",\"vmxvpfe_int_ctl_ip_1\":\"128.0.0.16\",\"is_AVPN_service\":\"false\",\"vmx_RSG_name\":\"vREXI-affinity\",\"vmx_int_ctl_forwarding\":\"l2\",\"vmxvre_oam_ip_0\":\"10.40.123.5\",\"vmxvpfe_sriov44_0_port_mac\":\"00:11:22:EF:AC:DF\",\"vmxvpfe_sriov41_0_port_vlanstrip\":\"false\",\"vmxvpfe_sriov42_0_port_vlanfilter\":\"4001\",\"vmxvpfe_sriov44_0_port_unknownunicastallow\":\"true\",\"vmxvre_image_name_0\":\"VRE-ENGINE_17.2-S2.1.qcow2\",\"vmxvre_instance\":\"0\",\"vmxvpfe_sriov43_0_port_mac\":\"00:11:22:EF:AC:DF\",\"vmxvre_flavor_name\":\"ns.c1r16d32.v5\",\"vmxvpfe_volume_size_0\":\"40.0\",\"vmxvpfe_sriov43_0_port_vlanfilter\":\"4001\",\"nf_naming\":\"{ecomp_generated_naming=true}\",\"multi_stage_design\":\"false\",\"nf_naming_code\":\"tvpr\",\"vmxvre_name_0\":\"vREXI\",\"vmxvpfe_sriov42_0_port_vlanstrip\":\"false\",\"vmxvpfe_volume_name_0\":\"vPFEXI_FBVolume\",\"vmx_RSG_id\":\"bd89a33c-13c3-4a04-8fde-1a57eb123141\",\"vmxvpfe_image_name_0\":\"VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2\",\"vmxvpfe_sriov43_0_port_unknownunicastallow\":\"true\",\"vmxvpfe_sriov44_0_port_unknownmulticastallow\":\"true\",\"vmxvre_console\":\"vidconsole\",\"vmxvpfe_sriov44_0_port_vlanfilter\":\"4001\",\"vmxvpfe_sriov42_0_port_mac\":\"00:11:22:EF:AC:DF\",\"vmxvpfe_volume_id_0\":\"47cede15-da2f-4397-a101-aa683220aff3\",\"vmxvpfe_sriov42_0_port_unknownmulticastallow\":\"true\",\"vmxvpfe_sriov44_0_port_vlanstrip\":\"false\",\"vf_module_id\":\"123\",\"nf_function\":\"Firewall\",\"vmxvpfe_sriov43_0_port_unknownmulticastallow\":\"true\",\"vmxvre_int_ctl_ip_0\":\"128.0.0.1\",\"ecomp_generated_naming\":\"true\",\"AIC_CLLI\":\"get_input:2017488adiodvpe20_AIC_CLLI\",\"vnf_name\":\"mtnj309me6vre\",\"vmxvpfe_sriov41_0_port_unknownunicastallow\":\"true\",\"vmxvre_volume_type_1\":\"HITACHI\",\"vmxvpfe_sriov44_0_port_broadcastallow\":\"true\",\"vmxvre_volume_type_0\":\"HITACHI\",\"vmxvpfe_volume_type_0\":\"HITACHI\",\"vmxvpfe_sriov43_0_port_broadcastallow\":\"true\",\"bandwidth_units\":\"get_input:2017488adiodvpe20_bandwidth_units\",\"vnf_id\":\"123\",\"vmxvre_oam_prefix\":\"24\",\"availability_zone_0\":\"mtpocfo-kvm-az01\",\"ASN\":\"get_input:2017488adiodvpe20_ASN\",\"vmxvre_chassis_i2cid\":\"161\",\"vmxvpfe_name_0\":\"vPFEXI\",\"bandwidth\":\"get_input:2017488adiodvpe20_bandwidth\",\"availability_zone_max_count\":\"1\",\"vmxvre_volume_size_0\":\"45.0\",\"vmxvre_volume_size_1\":\"50.0\",\"vmxvpfe_sriov42_0_port_broadcastallow\":\"true\",\"vmxvre_oam_gateway\":\"10.40.123.1\",\"vmxvre_volume_name_1\":\"vREXI_FAVolume\",\"vmxvre_ore_present\":\"0\",\"vmxvre_volume_name_0\":\"vREXI_FBVolume\",\"vmxvre_type\":\"0\",\"vnf_instance_name\":\"get_input:2017488adiodvpe20_vnf_instance_name\",\"vmxvpfe_sriov41_0_port_unknownmulticastallow\":\"true\",\"oam_net_id\":\"b95eeb1d-d55d-4827-abb4-8ebb94941429\",\"vmx_int_ctl_len\":\"24\",\"vmxvpfe_sriov43_0_port_vlanstrip\":\"false\",\"vmxvpfe_sriov41_0_port_broadcastallow\":\"true\",\"vmxvre_volume_id_1\":\"6e86797e-03cd-4fdc-ba72-2957119c746d\",\"vmxvpfe_sriov41_0_port_vlanfilter\":\"4001\",\"nf_role\":\"MIS\",\"vmxvre_volume_id_0\":\"f4eacb79-f687-4e9d-b760-21847c8bb15a\",\"vmxvpfe_sriov42_0_port_unknownunicastallow\":\"true\",\"vmxvpfe_flavor_name\":\"ns.c20r16d25.v5\"},\"type\":\"VF\",\"modelCustomizationName\":\"2017 488 ADIOD vPE 2 0\",\"vfModules\":{\"2017488adiodvpe20..2017488AdiodVpe2..ADIOD_vPFE_BV..module-2\":{\"uuid\":\"13bea14d-9405-43c6-920b-97bab64b6a01\",\"invariantUuid\":\"83dc51de-a337-498e-9fee-763603a057b4\",\"customizationUuid\":\"a90865d5-6de0-4ef8-bf53-d45fa3edddfc\",\"description\":null,\"name\":\"2017488AdiodVpe2..ADIOD_vPFE_BV..module-2\",\"version\":\"1\",\"modelCustomizationName\":\"2017488AdiodVpe2..ADIOD_vPFE_BV..module-2\",\"properties\":{\"minCountInstances\":null,\"maxCountInstances\":null,\"initialCount\":null,\"vfModuleLabel\":\"ADIOD_vPFE_BV\"},\"inputs\":{},\"volumeGroupAllowed\":true},\"2017488adiodvpe20..2017488AdiodVpe2..ADIOD_vRE_BV..module-1\":{\"uuid\":\"3f6d5e51-a9a0-4c53-bb6d-be836767d96f\",\"invariantUuid\":\"54466b6d-e33c-4f4d-87e2-32bc5b103589\",\"customizationUuid\":\"dba1d1ff-77e2-4f4d-b1b4-1bed564f13b1\",\"description\":null,\"name\":\"2017488AdiodVpe2..ADIOD_vRE_BV..module-1\",\"version\":\"1\",\"modelCustomizationName\":\"2017488AdiodVpe2..ADIOD_vRE_BV..module-1\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":\"ADIOD_vRE_BV\"},\"inputs\":{},\"volumeGroupAllowed\":true},\"2017488adiodvpe20..2017488AdiodVpe2..ADIOD_base_vPE_BV..module-0\":{\"uuid\":\"0a45a870-3a19-4238-a72a-eadfc583d4fe\",\"invariantUuid\":\"c636b302-fba2-4ed7-9f3b-c99715b6bb2e\",\"customizationUuid\":\"a0b634e6-514e-4977-91dd-3b8c295e6bc8\",\"description\":null,\"name\":\"2017488AdiodVpe2..ADIOD_base_vPE_BV..module-0\",\"version\":\"1\",\"modelCustomizationName\":\"2017488AdiodVpe2..ADIOD_base_vPE_BV..module-0\",\"properties\":{\"minCountInstances\":1,\"maxCountInstances\":1,\"initialCount\":1,\"vfModuleLabel\":\"ADIOD_base_vPE_BV\"},\"inputs\":{},\"volumeGroupAllowed\":false}},\"volumeGroups\":{\"2017488adiodvpe20..2017488AdiodVpe2..ADIOD_vPFE_BV..module-2\":{\"uuid\":\"13bea14d-9405-43c6-920b-97bab64b6a01\",\"invariantUuid\":\"83dc51de-a337-498e-9fee-763603a057b4\",\"customizationUuid\":\"a90865d5-6de0-4ef8-bf53-d45fa3edddfc\",\"description\":null,\"name\":\"2017488AdiodVpe2..ADIOD_vPFE_BV..module-2\",\"version\":\"1\",\"modelCustomizationName\":\"2017488AdiodVpe2..ADIOD_vPFE_BV..module-2\",\"properties\":{\"minCountInstances\":null,\"maxCountInstances\":null,\"initialCount\":null,\"vfModuleLabel\":\"ADIOD_vPFE_BV\"},\"inputs\":{}},\"2017488adiodvpe20..2017488AdiodVpe2..ADIOD_vRE_BV..module-1\":{\"uuid\":\"3f6d5e51-a9a0-4c53-bb6d-be836767d96f\",\"invariantUuid\":\"54466b6d-e33c-4f4d-87e2-32bc5b103589\",\"customizationUuid\":\"dba1d1ff-77e2-4f4d-b1b4-1bed564f13b1\",\"description\":null,\"name\":\"2017488AdiodVpe2..ADIOD_vRE_BV..module-1\",\"version\":\"1\",\"modelCustomizationName\":\"2017488AdiodVpe2..ADIOD_vRE_BV..module-1\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":\"ADIOD_vRE_BV\"},\"inputs\":{}}},\"vfcInstanceGroups\":{}}},\"networks\":{},\"collectionResource\":{},\"configurations\":{},\"serviceProxies\":{},\"vfModules\":{\"2017488adiodvpe20..2017488AdiodVpe2..ADIOD_vPFE_BV..module-2\":{\"uuid\":\"13bea14d-9405-43c6-920b-97bab64b6a01\",\"invariantUuid\":\"83dc51de-a337-498e-9fee-763603a057b4\",\"customizationUuid\":\"a90865d5-6de0-4ef8-bf53-d45fa3edddfc\",\"description\":null,\"name\":\"2017488AdiodVpe2..ADIOD_vPFE_BV..module-2\",\"version\":\"1\",\"modelCustomizationName\":\"2017488AdiodVpe2..ADIOD_vPFE_BV..module-2\",\"properties\":{\"minCountInstances\":null,\"maxCountInstances\":null,\"initialCount\":null,\"vfModuleLabel\":\"ADIOD_vPFE_BV\"},\"inputs\":{},\"volumeGroupAllowed\":true},\"2017488adiodvpe20..2017488AdiodVpe2..ADIOD_base_vPE_BV..module-0\":{\"uuid\":\"0a45a870-3a19-4238-a72a-eadfc583d4fe\",\"invariantUuid\":\"c636b302-fba2-4ed7-9f3b-c99715b6bb2e\",\"customizationUuid\":\"a0b634e6-514e-4977-91dd-3b8c295e6bc8\",\"description\":null,\"name\":\"2017488AdiodVpe2..ADIOD_base_vPE_BV..module-0\",\"version\":\"1\",\"modelCustomizationName\":\"2017488AdiodVpe2..ADIOD_base_vPE_BV..module-0\",\"properties\":{\"minCountInstances\":1,\"maxCountInstances\":1,\"initialCount\":1,\"vfModuleLabel\":\"ADIOD_base_vPE_BV\"},\"inputs\":{},\"volumeGroupAllowed\":false},\"2017488adiodvpe20..2017488AdiodVpe2..ADIOD_vRE_BV..module-1\":{\"uuid\":\"3f6d5e51-a9a0-4c53-bb6d-be836767d96f\",\"invariantUuid\":\"54466b6d-e33c-4f4d-87e2-32bc5b103589\",\"customizationUuid\":\"dba1d1ff-77e2-4f4d-b1b4-1bed564f13b1\",\"description\":null,\"name\":\"2017488AdiodVpe2..ADIOD_vRE_BV..module-1\",\"version\":\"1\",\"modelCustomizationName\":\"2017488AdiodVpe2..ADIOD_vRE_BV..module-1\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":\"ADIOD_vRE_BV\"},\"inputs\":{},\"volumeGroupAllowed\":true}},\"volumeGroups\":{\"2017488adiodvpe20..2017488AdiodVpe2..ADIOD_vPFE_BV..module-2\":{\"uuid\":\"13bea14d-9405-43c6-920b-97bab64b6a01\",\"invariantUuid\":\"83dc51de-a337-498e-9fee-763603a057b4\",\"customizationUuid\":\"a90865d5-6de0-4ef8-bf53-d45fa3edddfc\",\"description\":null,\"name\":\"2017488AdiodVpe2..ADIOD_vPFE_BV..module-2\",\"version\":\"1\",\"modelCustomizationName\":\"2017488AdiodVpe2..ADIOD_vPFE_BV..module-2\",\"properties\":{\"minCountInstances\":null,\"maxCountInstances\":null,\"initialCount\":null,\"vfModuleLabel\":\"ADIOD_vPFE_BV\"},\"inputs\":{}},\"2017488adiodvpe20..2017488AdiodVpe2..ADIOD_vRE_BV..module-1\":{\"uuid\":\"3f6d5e51-a9a0-4c53-bb6d-be836767d96f\",\"invariantUuid\":\"54466b6d-e33c-4f4d-87e2-32bc5b103589\",\"customizationUuid\":\"dba1d1ff-77e2-4f4d-b1b4-1bed564f13b1\",\"description\":null,\"name\":\"2017488AdiodVpe2..ADIOD_vRE_BV..module-1\",\"version\":\"1\",\"modelCustomizationName\":\"2017488AdiodVpe2..ADIOD_vRE_BV..module-1\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":\"ADIOD_vRE_BV\"},\"inputs\":{}}},\"pnfs\":{}}";
-
private static final String MIN_MAX_INITIAL_UUID_OLD_CSAR = "245562de-3984-49ef-a708-6c9d7cfcabd1";
private static final String MIN_MAX_INITIAL_INVARIANT_UUID_OLD_CSAR = "24216d6-71d0-41c8-ac81-0c5acfee514a";
- private static final String MIN_MAX_INITIAL_FILE_PATH_OLD_CSAR = "service-VmmeRvpmsFeAic3011217Svc-csar.csar.zip";
- private static final String MIN_MAX_INITIAL_EXPECTED_RESPONSE_OLD_CSAR = "{\"service\":{\"uuid\":\"281b5f7d-c7ac-4ea9-92fb-2c1d625ca681\",\"invariantUuid\":\"a977af77-db15-4375-a637-e9b994ecd569\",\"name\":\"vMME_rVPMS_FE AIC3.0-11.2.1.7_SVC\",\"version\":\"1.0\",\"toscaModelURL\":null,\"category\":\"Mobility\",\"serviceType\":null,\"serviceRole\":null,\"description\":\"New service for vMME vProbe Front End AIC3.0 VPMS Radcom 11.2.1.7. Front End includes Qrouter, vProbe aff, vLB Agent aff and vLB.\",\"serviceEcompNaming\":\"true\",\"instantiationType\":null,\"inputs\":{}},\"vnfs\":{\"vMMEvProbe_FE_AIC3-11.2.1_VF 1\":{\"uuid\":\"245562de-3984-49ef-a708-6c9d7cfcabd1\",\"invariantUuid\":\"124216d6-71d0-41c8-ac81-0c5acfee514a\",\"description\":\" New service for vMME vProbe Front End AIC3.0 VPMS Radcom 11.2.1.7. Front End includes Qrouter, vProbe aff, vLB Agent aff and vLB. \",\"name\":\"vMMEvProbe_FE_AIC3-11.2.1_VF\",\"version\":\"1.0\",\"customizationUuid\":\"8293273d-0e76-4661-926f-06a01ad2e683\",\"inputs\":{},\"commands\":{},\"properties\":{},\"type\":null,\"modelCustomizationName\":\"vMMEvProbe_FE_AIC3-11.2.1_VF 1\",\"vfModules\":{\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vprobe_eph..module-1\":{\"uuid\":\"e67e5b39-1f3b-4692-beec-eda94a0375a5\",\"invariantUuid\":\"21c1b57d-a618-4397-a7f4-9c37169ea09b\",\"customizationUuid\":\"a7d59494-3710-4b05-b4cd-e45dadbdc7ac\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_vprobe_eph..module-1\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vprobe_eph..module-1\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null,\"volumeGroupAllowed\":true},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Base_Module..module-0\":{\"uuid\":\"59bb7d14-278f-4ff5-bd5a-1a720c8b0d19\",\"invariantUuid\":\"9b5589c2-e4d1-4456-a23b-e0001c349155\",\"customizationUuid\":\"b9d6f6e8-e24a-4ad9-b863-1c3f6757bfe7\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Base_Module..module-0\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Base_Module..module-0\",\"properties\":{\"minCountInstances\":1,\"maxCountInstances\":1,\"initialCount\":1,\"vfModuleLabel\":null},\"inputs\":null,\"volumeGroupAllowed\":false},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlbagent_aff..module-2\":{\"uuid\":\"530e5e9f-2e82-4946-bf59-630f4d7ef4de\",\"invariantUuid\":\"d1fb14d9-0fa8-4ead-b5cc-be311c7a95bd\",\"customizationUuid\":\"c1f95365-716c-4f6c-9477-a8f760a2edce\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlbagent_aff..module-2\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlbagent_aff..module-2\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null,\"volumeGroupAllowed\":true},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_qrouter..module-4\":{\"uuid\":\"064385f9-795b-4fcb-9e3b-51d7d0ccad80\",\"invariantUuid\":\"603e8f71-88ad-4bbf-9992-2e9a72a91e29\",\"customizationUuid\":\"3b5efcd3-d14d-4b0e-91cf-937db5aa65b5\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_qrouter..module-4\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_qrouter..module-4\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null,\"volumeGroupAllowed\":true},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlb..module-3\":{\"uuid\":\"85b712e0-af62-4255-aeb6-ec9ae0f4eb13\",\"invariantUuid\":\"cba59330-855a-460b-8856-f6bff0dac6c2\",\"customizationUuid\":\"962479d7-b5b7-4129-bf9f-bfe4775e7921\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlb..module-3\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlb..module-3\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null,\"volumeGroupAllowed\":true}},\"volumeGroups\":{\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vprobe_eph..module-1\":{\"uuid\":\"e67e5b39-1f3b-4692-beec-eda94a0375a5\",\"invariantUuid\":\"21c1b57d-a618-4397-a7f4-9c37169ea09b\",\"customizationUuid\":\"a7d59494-3710-4b05-b4cd-e45dadbdc7ac\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_vprobe_eph..module-1\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vprobe_eph..module-1\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlbagent_aff..module-2\":{\"uuid\":\"530e5e9f-2e82-4946-bf59-630f4d7ef4de\",\"invariantUuid\":\"d1fb14d9-0fa8-4ead-b5cc-be311c7a95bd\",\"customizationUuid\":\"c1f95365-716c-4f6c-9477-a8f760a2edce\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlbagent_aff..module-2\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlbagent_aff..module-2\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_qrouter..module-4\":{\"uuid\":\"064385f9-795b-4fcb-9e3b-51d7d0ccad80\",\"invariantUuid\":\"603e8f71-88ad-4bbf-9992-2e9a72a91e29\",\"customizationUuid\":\"3b5efcd3-d14d-4b0e-91cf-937db5aa65b5\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_qrouter..module-4\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_qrouter..module-4\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlb..module-3\":{\"uuid\":\"85b712e0-af62-4255-aeb6-ec9ae0f4eb13\",\"invariantUuid\":\"cba59330-855a-460b-8856-f6bff0dac6c2\",\"customizationUuid\":\"962479d7-b5b7-4129-bf9f-bfe4775e7921\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlb..module-3\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlb..module-3\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null}},\"vfcInstanceGroups\":{}}},\"networks\":{},\"collectionResource\":null,\"configurations\":null,\"serviceProxies\":null,\"vfModules\":{\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vprobe_eph..module-1\":{\"uuid\":\"e67e5b39-1f3b-4692-beec-eda94a0375a5\",\"invariantUuid\":\"21c1b57d-a618-4397-a7f4-9c37169ea09b\",\"customizationUuid\":\"a7d59494-3710-4b05-b4cd-e45dadbdc7ac\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_vprobe_eph..module-1\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vprobe_eph..module-1\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null,\"volumeGroupAllowed\":true},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Base_Module..module-0\":{\"uuid\":\"59bb7d14-278f-4ff5-bd5a-1a720c8b0d19\",\"invariantUuid\":\"9b5589c2-e4d1-4456-a23b-e0001c349155\",\"customizationUuid\":\"b9d6f6e8-e24a-4ad9-b863-1c3f6757bfe7\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Base_Module..module-0\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Base_Module..module-0\",\"properties\":{\"minCountInstances\":1,\"maxCountInstances\":1,\"initialCount\":1,\"vfModuleLabel\":null},\"inputs\":null,\"volumeGroupAllowed\":false},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlbagent_aff..module-2\":{\"uuid\":\"530e5e9f-2e82-4946-bf59-630f4d7ef4de\",\"invariantUuid\":\"d1fb14d9-0fa8-4ead-b5cc-be311c7a95bd\",\"customizationUuid\":\"c1f95365-716c-4f6c-9477-a8f760a2edce\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlbagent_aff..module-2\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlbagent_aff..module-2\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null,\"volumeGroupAllowed\":true},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_qrouter..module-4\":{\"uuid\":\"064385f9-795b-4fcb-9e3b-51d7d0ccad80\",\"invariantUuid\":\"603e8f71-88ad-4bbf-9992-2e9a72a91e29\",\"customizationUuid\":\"3b5efcd3-d14d-4b0e-91cf-937db5aa65b5\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_qrouter..module-4\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_qrouter..module-4\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null,\"volumeGroupAllowed\":true},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlb..module-3\":{\"uuid\":\"85b712e0-af62-4255-aeb6-ec9ae0f4eb13\",\"invariantUuid\":\"cba59330-855a-460b-8856-f6bff0dac6c2\",\"customizationUuid\":\"962479d7-b5b7-4129-bf9f-bfe4775e7921\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlb..module-3\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlb..module-3\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null,\"volumeGroupAllowed\":true}},\"volumeGroups\":{\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vprobe_eph..module-1\":{\"uuid\":\"e67e5b39-1f3b-4692-beec-eda94a0375a5\",\"invariantUuid\":\"21c1b57d-a618-4397-a7f4-9c37169ea09b\",\"customizationUuid\":\"a7d59494-3710-4b05-b4cd-e45dadbdc7ac\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_vprobe_eph..module-1\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vprobe_eph..module-1\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlbagent_aff..module-2\":{\"uuid\":\"530e5e9f-2e82-4946-bf59-630f4d7ef4de\",\"invariantUuid\":\"d1fb14d9-0fa8-4ead-b5cc-be311c7a95bd\",\"customizationUuid\":\"c1f95365-716c-4f6c-9477-a8f760a2edce\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlbagent_aff..module-2\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlbagent_aff..module-2\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_qrouter..module-4\":{\"uuid\":\"064385f9-795b-4fcb-9e3b-51d7d0ccad80\",\"invariantUuid\":\"603e8f71-88ad-4bbf-9992-2e9a72a91e29\",\"customizationUuid\":\"3b5efcd3-d14d-4b0e-91cf-937db5aa65b5\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_qrouter..module-4\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_qrouter..module-4\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null},\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlb..module-3\":{\"uuid\":\"85b712e0-af62-4255-aeb6-ec9ae0f4eb13\",\"invariantUuid\":\"cba59330-855a-460b-8856-f6bff0dac6c2\",\"customizationUuid\":\"962479d7-b5b7-4129-bf9f-bfe4775e7921\",\"description\":null,\"name\":\"VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlb..module-3\",\"version\":\"1\",\"modelCustomizationName\":\"vmmevprobe_fe_aic31121_vf1..VmmevprobeFeAic31121Vf..FE_Add_On_Module_vlb..module-3\",\"properties\":{\"minCountInstances\":0,\"maxCountInstances\":null,\"initialCount\":0,\"vfModuleLabel\":null},\"inputs\":null}},\"pnfs\":null}";
+ private static final String MIN_MAX_INITIAL_FILE_PATH_OLD_CSAR = "service-VflorenceRvpmsFeAic3011217Svc-csar.csar.zip";
+
+ private static final String GROUPING_SERVICE_ROLE_FILE_PATH = "csar15782222_instantiationTypeAlacarte_VnfGrouping.zip";
+ private static final String GROUPING_SERVICE_ROLE_UUID = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc";
+ private static final String GROUPING_SERVICE_ROLE_INVARIANT_UUID = "7ee41ce4-4827-44b0-a48e-2707a59905d2";
+ private static final String GROUPING_SERVICE_ROLE_EXPECTED_RESPONSE = "VnfGroup/groupingServiceRoleResponse.json";
@BeforeClass
public void login() {
@@ -74,20 +74,22 @@ public class SdcApiTest extends BaseApiTest {
}
@Test
- public void getServiceModelALaCarteInstantiation() throws IOException, URISyntaxException {
+ public void getServiceModelALaCarteInstantiation() {
registerToSimulatorWithPresets(A_LA_CARTE_INSTANTIATION_TYPE_UUID, A_LA_CARTE_INSTANTIATION_TYPE_INVARIANT_UUID, A_LA_CARTE_INSTANTIATION_TYPE_FILE_PATH);
ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + A_LA_CARTE_INSTANTIATION_TYPE_UUID), String.class);
Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
- assertThat("The response is in the format of JSON", response.getBody(), either(is(A_LA_CARTE_INSTANTIATION_TYPE_EXPECTED_RESPONSE)).or(jsonStringEquals(A_LA_CARTE_INSTANTIATION_TYPE_EXPECTED_RESPONSE)));
+ String aLaCarteInstantiationTypeExpectedResponse = loadResourceAsString(A_LA_CARTE_INSTANTIATION_TYPE_EXPECTED_RESPONSE);
+ assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(turnOffInstantiationUI(aLaCarteInstantiationTypeExpectedResponse))));
}
@Test
- public void getServiceModelMacroInstantiation() throws IOException, URISyntaxException {
+ public void getServiceModelMacroInstantiation() {
registerToSimulatorWithPresets(MACRO_INSTANTIATION_TYPE_UUID, MACRO_INSTANTIATION_TYPE_INVARIANT_UUID, MACRO_INSTANTIATION_TYPE_FILE_PATH);
ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + MACRO_INSTANTIATION_TYPE_UUID), String.class);
Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
- assertThat("The response is in the format of JSON", response.getBody(), either(is(MACRO_INSTANTIATION_TYPE_EXPECTED_RESPONSE)).or(jsonStringEquals(MACRO_INSTANTIATION_TYPE_EXPECTED_RESPONSE)));
+ String macroInstantiationTypeExpectedResponse = loadResourceAsString(MACRO_INSTANTIATION_TYPE_EXPECTED_RESPONSE);
+ assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(turnOffInstantiationUI(macroInstantiationTypeExpectedResponse))));
}
@@ -96,8 +98,8 @@ public class SdcApiTest extends BaseApiTest {
registerToSimulatorWithPresets(MACRO_INSTANTIATION_TYPE_UUID, MACRO_INSTANTIATION_TYPE_INVARIANT_UUID, EMPTY_INSTANTIATION_TYPE_FILE_PATH);
ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + MACRO_INSTANTIATION_TYPE_UUID), String.class);
Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
- assertThat("The response is in the format of JSON", response.getBody(), either(is(EMPTY_INSTANTIATION_TYPE_EXPECTED_RESPONSE)).or(jsonStringEquals(EMPTY_INSTANTIATION_TYPE_EXPECTED_RESPONSE)));
-
+ String emptyInstantiationTypeExpectedResponse = loadResourceAsString(EMPTY_INSTANTIATION_TYPE_EXPECTED_RESPONSE);
+ assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(turnOffInstantiationUI(emptyInstantiationTypeExpectedResponse))));
}
@Test
@@ -105,7 +107,8 @@ public class SdcApiTest extends BaseApiTest {
registerToSimulatorWithPresets(MACRO_INSTANTIATION_TYPE_UUID, MACRO_INSTANTIATION_TYPE_INVARIANT_UUID, BOTH_INSTANTIATION_TYPE_FILE_PATH);
ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + MACRO_INSTANTIATION_TYPE_UUID), String.class);
Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
- assertThat("The response is in the format of JSON", response.getBody(), either(is(MACRO_INSTANTIATION_TYPE_EXPECTED_RESPONSE)).or(jsonStringEquals(MACRO_INSTANTIATION_TYPE_EXPECTED_RESPONSE)));
+ String macroInstantiationTypeExpectedResponse = loadResourceAsString(MACRO_INSTANTIATION_TYPE_EXPECTED_RESPONSE);
+ assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(turnOffInstantiationUI(macroInstantiationTypeExpectedResponse))));
}
@Test
@@ -113,7 +116,8 @@ public class SdcApiTest extends BaseApiTest {
registerToSimulatorWithPresets(MIN_MAX_INITIAL_UUID, MIN_MAX_INITIAL_INVARIANT_UUID, MIN_MAX_INITIAL_FILE_PATH);
ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + MIN_MAX_INITIAL_UUID), String.class);
Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
- assertThat("The response is in the format of JSON", response.getBody(), either(is(MIN_MAX_INITIAL_EXPECTED_RESPONSE)).or(jsonStringEquals(MIN_MAX_INITIAL_EXPECTED_RESPONSE)));
+ String minMaxInitialExpectedResponse = loadResourceAsString("sdcApiTest/minMaxInitialExpectedResponse.json");
+ assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(turnOffInstantiationUI(minMaxInitialExpectedResponse))));
}
@Test
@@ -121,7 +125,18 @@ public class SdcApiTest extends BaseApiTest {
registerToSimulatorWithPresets(MIN_MAX_INITIAL_UUID_OLD_CSAR, MIN_MAX_INITIAL_INVARIANT_UUID_OLD_CSAR, MIN_MAX_INITIAL_FILE_PATH_OLD_CSAR);
ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + MIN_MAX_INITIAL_UUID_OLD_CSAR), String.class);
Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
- assertThat("The response is in the format of JSON", response.getBody(), either(is(MIN_MAX_INITIAL_EXPECTED_RESPONSE_OLD_CSAR)).or(jsonStringEquals(MIN_MAX_INITIAL_EXPECTED_RESPONSE_OLD_CSAR)));
+ String minMaxInitialExpectedResponseOldCsar = loadResourceAsString("sdcApiTest/minMaxInitialExpectedResponseOldCsar.json");
+ assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(minMaxInitialExpectedResponseOldCsar)));
+ }
+
+ @Test
+ @FeatureTogglingTest(Features.FLAG_1902_VNF_GROUPING)
+ public void getServiceModelWithServiceRoleGrouping(){
+ registerToSimulatorWithPresets(GROUPING_SERVICE_ROLE_UUID, GROUPING_SERVICE_ROLE_INVARIANT_UUID, GROUPING_SERVICE_ROLE_FILE_PATH);
+ ResponseEntity<String> response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + GROUPING_SERVICE_ROLE_UUID), String.class);
+ Assert.assertEquals(response.getStatusCode(), HttpStatus.OK);
+ String groupingServiceRoleExpectedResponse = loadResourceAsString(GROUPING_SERVICE_ROLE_EXPECTED_RESPONSE);
+ assertThat("The response is in the format of JSON", response.getBody(), is(jsonStringEquals(groupingServiceRoleExpectedResponse)));
}
private void registerToSimulatorWithPresets(String uuid, String invariantUuid, String pathPath){
@@ -131,6 +146,15 @@ public class SdcApiTest extends BaseApiTest {
registerExpectationFromPresets(presets, CLEAR_THEN_SET);
}
+ private String turnOffInstantiationUI(String expectedJson) {
+ if (!Features.FLAG_5G_IN_NEW_INSTANTIATION_UI.isActive()) {
+ // replaces the instantiationUI field-value with "legacy", whatever it was
+ return expectedJson.replaceFirst("(\"instantiationUI\": *\")[^\"]*(\",)", "$1legacy$2");
+ } else {
+ return expectedJson;
+ }
+ }
+
@Test
public void withModelFromE2eWithToscaParserButNewFlow_requestModels_expectVnfRelatedVfModulesNotNull() {
@@ -139,8 +163,8 @@ public class SdcApiTest extends BaseApiTest {
volumeGroups, because a 'isNewFlow' value in org.onap.vid.asdc.parser.ToscaParserImpl
was always false because a coding error.
*/
- registerExpectation("get_sdc_catalog_services_VmmeRvpmsFeAic3011217Svc.json", CLEAR_THEN_SET);
- registerExpectation("aai_get_full_subscribers.json", APPEND);
+ registerExpectation("get_sdc_catalog_services_VflorenceRvpmsFeAic3011217Svc.json", CLEAR_THEN_SET);
+ registerExpectation("create_new_instance/aai_get_full_subscribers.json", APPEND);
final JsonNode response = restTemplate.getForObject(uri + "/rest/models/services/" + "245562de-3984-49ef-a708-6c9d7cfcabd1", JsonNode.class);
diff --git a/vid-automation/src/test/java/org/onap/vid/api/ServiceInstanceMsoApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/ServiceInstanceMsoApiTest.java
index ce290c89f..40ce80ba6 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/ServiceInstanceMsoApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/ServiceInstanceMsoApiTest.java
@@ -1,16 +1,21 @@
package org.onap.vid.api;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import java.io.IOException;
+import java.net.URISyntaxException;
import org.apache.commons.text.StringEscapeUtils;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOActivateFabricConfiguration;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSOActivateFabricConfigurationErrorResponse;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeactivateAndCloudDelete;
+import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeactivateAndCloudDeleteErrorResponse;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.testng.annotations.Test;
import vid.automation.test.infra.FeatureTogglingTest;
import vid.automation.test.infra.Features;
-import java.io.IOException;
-import java.net.URISyntaxException;
-
public class ServiceInstanceMsoApiTest extends BaseMsoApiTest{
//Urls
@@ -18,11 +23,15 @@ public class ServiceInstanceMsoApiTest extends BaseMsoApiTest{
public static final String MSO_DEACTIVATE_SERVICE_INSTANCE = "mso/mso_deactivate_service_instance/f36f5734-e9df-4fbf-9f35-61be13f028a1";
public static final String MSO_DELETE_SERVICE_INSTANCE = "mso/mso_delete_svc_instance/f36f5734-e9df-4fbf-9f35-61be13f028a1?serviceStatus=active";
public static final String MSO_UNASSIGN_SERVICE_INSTANCE = "mso/mso_delete_svc_instance/f36f5734-e9df-4fbf-9f35-61be13f028a1?serviceStatus=created";
+ public static final String MSO_ACTIVATE_FABRIC_CONFIGURATION = "mso/mso_activate_fabric_configuration/f36f5734-e9df-4fbf-9f35-61be13f028a1";
+ public static final String MSO_DEACTIVATE_AND_CLOUD_DELETE = "mso/mso_vfmodule_soft_delete/f36f5734-e9df-4fbf-9f35-61be13f028a1/vnfId/vfModuleId";
//Request Details
private static final String ACTIVATE_SERVICE_REQUEST_DETAILS = "registration_to_simulator/body_jsons/mso_request_activate_service_instance.json";
private static final String DEACTIVATE_SERVICE_REQUEST_DETAILS = "registration_to_simulator/body_jsons/mso_request_deactivate_service_instance.json";
private static final String DELETE_AND_UNASSIGN_SERVICE_REQUEST_DETAILS = "registration_to_simulator/body_jsons/mso_request_delete_or_unassign_service_instance.json";
+ private static final String ACTIVATE_FABRIC_CONFIGURATION_REQUEST_DETAILS = "registration_to_simulator/body_jsons/mso_request_activate_fabric_configuration.json";
+ private static final String DEACTIVATE_AND_CLOUD_DELETE_DATA = "registration_to_simulator/body_jsons/mso_request_deactivate_and_cloud_delete.json";
//Jsons
private static final String ACTIVATE_OK_JSON = "activate_service_instance.json";
@@ -35,7 +44,8 @@ public class ServiceInstanceMsoApiTest extends BaseMsoApiTest{
//Expected Responses
private static final String EXPECTED_SUCCESS_MSO_RESPONSE = "{\"requestReferences\": {\"instanceId\": \"f36f5734-e9df-4fbf-9f35-61be13f028a1\", \"requestId\": \"b6dc9806-b094-42f7-9386-a48de8218ce8\"}}";
- private static final String EXPECTED_ERROR_MSO_RESPONSE = "{\"error\":\"222\",\"message\":\"error message\"}";
+ private static final String EXPECTED_ERROR_MSO_RESPONSE = "{\"message\":\"error message\",\"error\":\"222\"}";
+
@Test
public void testActivateServiceInstanceSucceed() throws Exception {
@@ -118,4 +128,37 @@ public class ServiceInstanceMsoApiTest extends BaseMsoApiTest{
buildUri(MSO_DEACTIVATE_SERVICE_INSTANCE), requestBody, errorCode, EXPECTED_ERROR_MSO_RESPONSE, HttpMethod.POST);
}
+
+ @Test
+ public void testActivateFabricConfigurationSucceed() throws Exception {
+ String requestBody = TestUtils.convertRequest(objectMapper, ACTIVATE_FABRIC_CONFIGURATION_REQUEST_DETAILS);
+ callMsoWithFineRequest(new PresetMSOActivateFabricConfiguration("f36f5734-e9df-4fbf-9f35-61be13f028a1", "b6dc9806-b094-42f7-9386-a48de8218ce8"), buildUri(MSO_ACTIVATE_FABRIC_CONFIGURATION), requestBody,
+ HttpStatus.ACCEPTED.value(), EXPECTED_SUCCESS_MSO_RESPONSE, HttpMethod.POST);
+ }
+
+ @Test(dataProvider = "errorCodes")
+ public void testActivateFabricConfigurationFailed(int errorCode) throws IOException, URISyntaxException {
+ String requestBody = TestUtils.convertRequest(objectMapper, ACTIVATE_FABRIC_CONFIGURATION_REQUEST_DETAILS);
+ callMsoWithSimulatedErrorResponse(new PresetMSOActivateFabricConfigurationErrorResponse("f36f5734-e9df-4fbf-9f35-61be13f028a1", errorCode),
+ buildUri(MSO_ACTIVATE_FABRIC_CONFIGURATION), requestBody, errorCode, EXPECTED_ERROR_MSO_RESPONSE, HttpMethod.POST);
+ }
+
+ @Test
+ public void testDeactivateAndCloudDeleteSucceed() throws Exception {
+ String requestBody = TestUtils.convertRequest(objectMapper, DEACTIVATE_AND_CLOUD_DELETE_DATA);
+ callMsoWithFineRequest(ImmutableList.of(
+ new PresetMSODeactivateAndCloudDelete("f36f5734-e9df-4fbf-9f35-61be13f028a1", "vnfId", "vfModuleId", "b6dc9806-b094-42f7-9386-a48de8218ce8", "irma-aic"),
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC),
+ buildUri(MSO_DEACTIVATE_AND_CLOUD_DELETE), requestBody,
+ HttpStatus.ACCEPTED.value(), EXPECTED_SUCCESS_MSO_RESPONSE, HttpMethod.POST);
+ }
+
+ @Test(dataProvider = "errorCodes")
+ public void testDeactivateAndCloudDeleteFailed(int errorCode) throws IOException, URISyntaxException {
+ String requestBody = TestUtils.convertRequest(objectMapper, DEACTIVATE_AND_CLOUD_DELETE_DATA);
+ callMsoWithSimulatedErrorResponse(ImmutableList.of(
+ new PresetMSODeactivateAndCloudDeleteErrorResponse("f36f5734-e9df-4fbf-9f35-61be13f028a1", "vnfId", "vfModuleId", errorCode, "irma-aic"),
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC),
+ buildUri(MSO_DEACTIVATE_AND_CLOUD_DELETE), requestBody, errorCode, EXPECTED_ERROR_MSO_RESPONSE, HttpMethod.POST);
+ }
}
diff --git a/vid-automation/src/test/java/org/onap/vid/api/ServicePermissionsApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/ServicePermissionsApiTest.java
new file mode 100644
index 000000000..385ec9b0d
--- /dev/null
+++ b/vid-automation/src/test/java/org/onap/vid/api/ServicePermissionsApiTest.java
@@ -0,0 +1,63 @@
+package org.onap.vid.api;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+import com.google.common.collect.ImmutableMap;
+import java.util.Map;
+import org.onap.sdc.ci.tests.datatypes.UserCredentials;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import vid.automation.test.Constants;
+import vid.automation.test.model.User;
+import vid.automation.test.services.SimulatorApi;
+
+public class ServicePermissionsApiTest extends BaseApiTest {
+
+ private final String emanuelSubscriberId = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
+ private final String uspVoiceSubscriberId = "e433710f-9217-458d-a79d-1c7aff376d89";
+
+ @BeforeClass
+ public void setAaiSubscribers() {
+ SimulatorApi.registerExpectationFromPreset(new PresetAAIGetSubscribersGet(), SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET);
+ }
+
+ @Test
+ public void servicePermissions_loginWithPermissions_1IsPermitted1NotPermitted() {
+ login(userCredentials(Constants.Users.EMANUEL_vWINIFRED));
+ assertPermissions(emanuelSubscriberId, "vRichardson", true);
+ assertPermissions(emanuelSubscriberId, "someNonexistent", false);
+ }
+
+ @Test
+ public void servicePermissions_loginPermissionsWithTenant_IsPermittedRegardlessOfTenant() {
+ login(userCredentials("Emanuel_with_tenant"));
+ assertPermissions(emanuelSubscriberId, "vWINIFRED", true);
+ }
+
+ @Test
+ public void servicePermissions_loginWithNoPermissionsAtAll_nothingIsPermitted() {
+ login(userCredentials(Constants.Users.READONLY));
+ assertPermissions(emanuelSubscriberId, "vRichardson", false);
+ assertPermissions(emanuelSubscriberId, "someNonexistent", false);
+ }
+
+ @Test
+ public void servicePermissions_serviceTypeWithSpace_isPermitted() {
+ login(userCredentials(Constants.Users.SILVIA_ROBBINS_TYLER_SILVIA));
+ assertPermissions(uspVoiceSubscriberId, "TYLER SILVIA", true);
+ }
+
+ private UserCredentials userCredentials(String userName) {
+ User user = usersService.getUser(userName);
+ return new UserCredentials(user.credentials.userId, user.credentials.password, userName, "", "");
+ }
+
+ private void assertPermissions(final String subscriberId, final String serviceType, boolean isEditPermitted) {
+ final Map response = restTemplate.getForObject(uri + "/roles/service_permissions?subscriberId=" + subscriberId + "&serviceType=" + serviceType, Map.class);
+ assertThat(response, is(ImmutableMap.of(
+ "isEditPermitted", isEditPermitted
+ )));
+ }
+}
diff --git a/vid-automation/src/test/java/org/onap/vid/api/ServiceTreeApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/ServiceTreeApiTest.java
new file mode 100644
index 000000000..52aa2e388
--- /dev/null
+++ b/vid-automation/src/test/java/org/onap/vid/api/ServiceTreeApiTest.java
@@ -0,0 +1,370 @@
+package org.onap.vid.api;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.Multimap;
+import org.onap.simulator.presetGenerator.presets.aai.*;
+import org.onap.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet;
+import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
+import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import vid.automation.test.services.SimulatorApi;
+
+import java.util.UUID;
+
+import static org.apache.commons.text.StringEscapeUtils.escapeJson;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.*;
+import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
+
+public class ServiceTreeApiTest extends BaseApiTest {
+
+ private static final String API_URL = "/aai_get_service_instance_topology/{subscriberId}/{serviceType}/{serviceInstanceId}";
+
+ @BeforeClass
+ public void login() {
+ super.login();
+ }
+
+ @Test
+ public void serviceWithNoChildren_requestDoesSomething() {
+ final PresetAAIStandardQueryGet serviceInstance =
+ PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-instance-model-invariant-id", "global-customer-id", "service-instance-type", ImmutableMultimap.of());
+
+ SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
+ serviceInstance,
+ new PresetAAIModelsByInvariantIdGet(ImmutableList.of("service-instance-model-invariant-id")),
+ new PresetSDCGetServiceMetadataGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-instance-model-invariant-id", "csar15782222_instantiationTypeMacroWithNetwork.zip"),
+ new PresetSDCGetServiceToscaModelGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "csar15782222_instantiationTypeMacroWithNetwork.zip")
+ ), CLEAR_THEN_SET);
+ final String response = restTemplate.getForObject(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
+
+ assertJsonEquals(response, "" +
+ "{" +
+ " \"instanceName\": \"" + escapeJson(serviceInstance.getInstanceName()) + "\"," +
+ " \"action\": \"None\"," +
+ " \"instanceId\": \"service-instance-id\"," +
+ " \"orchStatus\": \"GARBAGE DATA\"," +
+ " \"globalSubscriberId\": \"global-customer-id\"," +
+ " \"subscriptionServiceType\": \"service-instance-type\"," +
+ " \"owningEntityId\": null," +
+ " \"owningEntityName\": null," +
+ " \"productFamilyId\": null," +
+ " \"lcpCloudRegionId\": null," +
+ " \"tenantId\": null," +
+ " \"tenantName\": null," +
+ " \"aicZoneId\": null," +
+ " \"aicZoneName\": null," +
+ " \"projectName\": null," +
+ " \"rollbackOnFailure\": null," +
+ " \"modelInfo\": {" +
+ " \"modelInvariantId\": \"service-instance-model-invariant-id\"," +
+ " \"modelVersionId\": \"7a6ee536-f052-46fa-aa7e-2fca9d674c44\"," +
+ " \"modelName\": \"vf_vEPDG\"," +
+ " \"modelType\": \"service\"," +
+ " \"modelVersion\": \"2.0\"" +
+ " }," +
+ " \"vnfs\": {}," +
+ " \"networks\": {}," +
+ " \"vnfGroups\": {}," +
+ " \"validationCounter\": 0," +
+ " \"existingVNFCounterMap\": {}," +
+ " \"existingNetworksCounterMap\": {}," +
+ " \"existingVnfGroupCounterMap\": {}," +
+ " \"isALaCarte\": false" +
+ "}");
+ }
+
+ @Test
+ public void searchGroupMembers_expected4vnfs() {
+ PresetAAIStandardQueryGet instanceGroup1 = PresetAAIStandardQueryGet.ofInstanceGroup("L3-NETWORK", "SUB_INTERFACE", ImmutableMultimap.of());
+ PresetAAIStandardQueryGet instanceGroup2 = PresetAAIStandardQueryGet.ofInstanceGroup("LOAD-GROUP", "SERVICE-ACCESS", ImmutableMultimap.of());
+
+ PresetAAIStandardQueryGet vnfPreset1 =
+ PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "",
+ ImmutableMultimap.of("instance-group", instanceGroup1.getReqPath()));
+
+ PresetAAIStandardQueryGet vnfPreset2 =
+ PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "eb5f56bf-5855-4e61-bd00-3e19a953bf02",
+ "\"in-maint\": true,", ImmutableMultimap.of());
+
+ PresetAAIStandardQueryGet vnfPreset3 =
+ PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "",
+ ImmutableMultimap.of("instance-group", instanceGroup1.getReqPath()));
+
+ PresetAAIStandardQueryGet vnfPreset4 =
+ PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "b7f2e8fb-ac71-4ea0-a801-06ef1479ea84",
+ "\"in-maint\": true,", ImmutableMultimap.of());
+
+ PresetAAIStandardQueryGet vnfPreset5 =
+ PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "b7f2e8fb-ac71-4ea0-a801-06ef1479ea84",
+ "\"in-maint\": true,", ImmutableMultimap.of("instance-group", instanceGroup2.getReqPath()));
+
+ Multimap<String, String> serviceInstance1 = ImmutableMultimap.<String, String>builder()
+ .putAll("generic-vnf", vnfPreset1.getReqPath())
+ .putAll("generic-vnf", vnfPreset3.getReqPath())
+ .build();
+
+ Multimap<String, String> serviceInstance2 = ImmutableMultimap.<String, String>builder()
+ .putAll("generic-vnf", vnfPreset2.getReqPath())
+ .putAll("generic-vnf", vnfPreset4.getReqPath())
+ .putAll("generic-vnf", vnfPreset5.getReqPath())
+ .build();
+
+ PresetAAIGetServiceInstancesByInvariantId serviceInstancesList = new PresetAAIGetServiceInstancesByInvariantId(
+ "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14",
+ ImmutableMap.of("service-instance-id1", serviceInstance1,
+ "service-instance-id2", serviceInstance2));
+
+
+ SimulatorApi.registerExpectationFromPresets(
+ ImmutableList.of(serviceInstancesList,
+ vnfPreset1, instanceGroup1,
+ vnfPreset2,
+ vnfPreset3,
+ vnfPreset4,
+ vnfPreset5, instanceGroup2, //this vnf should be filtered out
+ new PresetAAIModelsByInvariantIdGet(ImmutableList.of("vnf-instance-model-invariant-id")),
+ new PresetAAIGetCloudRegionFromVnf(vnfPreset1.getInstanceId()),
+ new PresetAAIGetCloudRegionFromVnf(vnfPreset2.getInstanceId()),
+ new PresetAAIGetCloudRegionFromVnf(vnfPreset3.getInstanceId()),
+ new PresetAAIGetCloudRegionFromVnf(vnfPreset4.getInstanceId())
+ ), CLEAR_THEN_SET);
+
+ String api_url = "aai_search_group_members?subscriberId={subscriberId}&serviceType={serviceType}&serviceInvariantId={serviceInvariantId}" +
+ "&groupType={groupType}&groupRole={groupRole}";
+
+ final String response = restTemplate.getForObject(buildUri(api_url), String.class, "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14", "LOAD-GROUP", "SERVICE-ACCESS");
+
+ LOGGER.info(response);
+
+ String expected = TestUtils.convertRequest(objectMapper, "VnfGroup/searchMembersResponse.json");
+ expected = expected
+ .replace("VNF1_INSTANCE_NAME", vnfPreset1.getInstanceName())
+ .replace("VNF1_INSTANCE_ID", vnfPreset1.getInstanceId())
+ .replace("VNF1_INSTANCE_TYPE", vnfPreset1.getInstanceType())
+ .replace("VNF2_INSTANCE_NAME", vnfPreset2.getInstanceName())
+ .replace("VNF2_INSTANCE_ID", vnfPreset2.getInstanceId())
+ .replace("VNF2_INSTANCE_TYPE", vnfPreset2.getInstanceType())
+ .replace("VNF3_INSTANCE_NAME", vnfPreset3.getInstanceName())
+ .replace("VNF3_INSTANCE_ID", vnfPreset3.getInstanceId())
+ .replace("VNF3_INSTANCE_TYPE", vnfPreset3.getInstanceType())
+ .replace("VNF4_INSTANCE_NAME", vnfPreset4.getInstanceName())
+ .replace("VNF4_INSTANCE_ID", vnfPreset4.getInstanceId())
+ .replace("VNF4_INSTANCE_TYPE", vnfPreset4.getInstanceType());
+
+ assertJsonEquals(response, expected);
+ }
+
+ @Test
+ public void searchGroupMembers_expectedNoResult() {
+ PresetAAIGetServiceInstancesByInvariantId serviceInstancesList = new PresetAAIGetServiceInstancesByInvariantId(
+ "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14",
+ ImmutableMap.of("service-instance-id1", ImmutableMultimap.of(),
+ "service-instance-id2", ImmutableMultimap.of()));
+
+
+ SimulatorApi.registerExpectationFromPreset(serviceInstancesList, CLEAR_THEN_SET);
+
+ String api_url = "aai_search_group_members?subscriberId={subscriberId}&serviceType={serviceType}&serviceInvariantId={serviceInvariantId}" +
+ "&groupType={groupType}&groupRole={groupRole}";
+
+ final String response = restTemplate.getForObject(buildUri(api_url), String.class, "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14", "LOAD-GROUP", "SERVICE-ACCESS");
+
+ assertJsonEquals(response, "[]");
+ }
+
+ @Test
+ public void serviceWithMultiplePlys_responseIsReasonable() {
+
+ PresetAAIStandardQueryGet l3NetworkPreset1 =
+ PresetAAIStandardQueryGet.ofL3Network("CONTRAIL30_BASIC", "Assigned",
+ ImmutableMultimap.of());
+
+ PresetAAIStandardQueryGet vlanTag1 = PresetAAIStandardQueryGet.ofVlanTag(44);
+
+ PresetAAIStandardQueryGet l3NetworkPreset2 =
+
+ PresetAAIStandardQueryGet.ofL3Network("CONTRAIL30_BASIC", "Created",
+ ImmutableMultimap.of("vlan-tag", vlanTag1.getReqPath()));
+
+ PresetAAIStandardQueryGet l3NetworkPreset3 =
+ PresetAAIStandardQueryGet.ofL3Network("CONTRAIL30_BASIC", "Assigned", "nvtprov", "ddc3f20c-08b5-40fd-af72-c6d14636b986","94fdd893-4a36-4d70-b16a-ec29c54c184f",
+ ImmutableMultimap.of());
+
+ PresetAAIStandardQueryGet l3NetworkPreset4 =
+ PresetAAIStandardQueryGet.ofL3Network("CONTRAIL30_HIMELGUARD", "Created", "preprov", "ddc3f20c-08b5-40fd-af72-c6d14636b986","94fdd893-4a36-4d70-b16a-ec29c54c184f",
+ ImmutableMultimap.of());
+
+ PresetAAIStandardQueryGet volumeGroup1 =
+ PresetAAIStandardQueryGet.ofVolumeGroup("vSON_test", ImmutableMultimap.of());
+
+ PresetAAIStandardQueryGet instanceGroup1 = PresetAAIStandardQueryGet.ofInstanceGroup("L3-NETWORK", "Ruby Figueroa", ImmutableMultimap.of());
+
+ PresetAAIStandardQueryGet collection1 =
+ PresetAAIStandardQueryGet.ofCollectionResource("Assigned",
+ ImmutableMultimap.of("instance-group", instanceGroup1.getReqPath()));
+
+ PresetAAIStandardQueryGet vnfPreset1 =
+ PresetAAIStandardQueryGet.ofVnf(randUuid(),
+ ImmutableMultimap.of("l3-network", l3NetworkPreset1.getReqPath(), "l3-network", l3NetworkPreset2.getReqPath()));
+
+ PresetAAIStandardQueryGet vnfPreset2 =
+ PresetAAIStandardQueryGet.ofVnf(randUuid(), "d6557200-ecf2-4641-8094-5393ae3aae60","91415b44-753d-494c-926a-456a9172bbb9",
+ "\"in-maint\": true,", ImmutableMultimap.of("volume-group", volumeGroup1.getReqPath()));
+
+ PresetAAIGetVfModulesByVnf vfModules2 = new PresetAAIGetVfModulesByVnf(vnfPreset2.getInstanceId());
+
+ final PresetAAIStandardQueryGet serviceInstance =
+ PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "6e59c5de-f052-46fa-aa7e-2fca9d674c44", "d27e42cf-087e-4d31-88ac-6c4b7585f800", "global-customer-id", "service-instance-type",
+ ImmutableMultimap.<String, String>builder()
+ .putAll("l3-network", l3NetworkPreset3.getReqPath(), l3NetworkPreset4.getReqPath())
+ .putAll("collection", collection1.getReqPath())
+ .putAll("generic-vnf", vnfPreset1.getReqPath(), vnfPreset2.getReqPath())
+ .build()
+ );
+
+ SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
+ serviceInstance,
+ l3NetworkPreset3, l3NetworkPreset4, vnfPreset1, vnfPreset2, collection1,
+ volumeGroup1, l3NetworkPreset1, l3NetworkPreset2, instanceGroup1,
+ vlanTag1, vfModules2,
+ new PresetAAIModelsByInvariantIdGet(ImmutableList.of("d27e42cf-087e-4d31-88ac-6c4b7585f800")),
+ new PresetGetSessionSlotCheckIntervalGet(),
+ new PresetAAIGetSubscribersGet(),
+ new PresetSDCGetServiceMetadataGet("6e59c5de-f052-46fa-aa7e-2fca9d674c44", "d27e42cf-087e-4d31-88ac-6c4b7585f800", "csar15782222_instantiationTypeMacroWithNetwork.zip"),
+ new PresetSDCGetServiceToscaModelGet("6e59c5de-f052-46fa-aa7e-2fca9d674c44", "csar15782222_instantiationTypeMacroWithNetwork.zip")
+ ), CLEAR_THEN_SET);
+
+ String expected = TestUtils.convertRequest(objectMapper, "aaiGetInstanceTopology/ServiceTreeWithMultipleChildren_serviceInstance.json");
+ expected = expected
+ .replace("SERVICE_INSTANCE_NAME", serviceInstance.getInstanceName())
+ .replace("VNF1_INSTANCE_NAME", vnfPreset1.getInstanceName())
+ .replace("VNF1_INSTANCE_ID", vnfPreset1.getInstanceId())
+ .replace("VNF1_INSTANCE_TYPE", vnfPreset1.getInstanceType())
+ .replace("VNF2_INSTANCE_NAME", vnfPreset2.getInstanceName())
+ .replace("VNF2_INSTANCE_ID", vnfPreset2.getInstanceId())
+ .replace("VNF2_INSTANCE_TYPE", vnfPreset2.getInstanceType())
+ .replace("NETWORK1_INSTANCE_NAME", l3NetworkPreset1.getInstanceName())
+ .replace("NETWORK1_INSTANCE_ID", l3NetworkPreset1.getInstanceId())
+ .replace("NETWORK2_INSTANCE_NAME", l3NetworkPreset2.getInstanceName())
+ .replace("NETWORK2_INSTANCE_ID", l3NetworkPreset2.getInstanceId())
+ .replace("NETWORK3_INSTANCE_NAME", l3NetworkPreset3.getInstanceName())
+ .replace("NETWORK3_INSTANCE_ID", l3NetworkPreset3.getInstanceId())
+ .replace("NETWORK4_INSTANCE_NAME", l3NetworkPreset4.getInstanceName())
+ .replace("NETWORK4_INSTANCE_ID", l3NetworkPreset4.getInstanceId());
+
+ String response = restTemplate.getForObject(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
+
+ assertJsonEquals(response, expected);
+ }
+
+ @Test
+ public void serviceWithVnfGotError_exceptionIsThrown() {
+
+ PresetAAIStandardQueryGet vnfPreset =
+ PresetAAIStandardQueryGet.ofVnf(randUuid(),
+ ImmutableMultimap.of("l3-network", "/aai/v../I'm a wrong path"));
+
+ final PresetAAIStandardQueryGet serviceInstance =
+ PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-instance-model-invariant-id", "global-customer-id", "service-instance-type",
+ ImmutableMultimap.<String, String>builder()
+ .putAll("generic-vnf", vnfPreset.getReqPath())
+ .build()
+ );
+
+ SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
+ serviceInstance,
+ vnfPreset,
+ new PresetAAIModelsByInvariantIdGet(ImmutableList.of("service-instance-model-invariant-id")),
+ new PresetSDCGetServiceMetadataGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-instance-model-invariant-id", "csar15782222_instantiationTypeMacroWithNetwork.zip"),
+ new PresetSDCGetServiceToscaModelGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "csar15782222_instantiationTypeMacroWithNetwork.zip"),
+ new PresetGetSessionSlotCheckIntervalGet(),
+ new PresetAAIGetSubscribersGet()
+ ), CLEAR_THEN_SET);
+
+ final ResponseEntity<String> response = restTemplateErrorAgnostic.getForEntity(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
+ assertThat(response.getBody(),containsString("AAI node fetching failed"));
+ assertThat(response.getStatusCode(), is(HttpStatus.INTERNAL_SERVER_ERROR));
+ }
+
+ @Test
+ public void serviceWithTwoVnfGroupsAndRelatedVnfs() {
+ PresetAAIStandardQueryGet relatedVnf1 =
+ PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "7a6ee536-f052-46fa-aa7e-2fca9d674c44",
+ "", ImmutableMultimap.of());
+
+ PresetAAIStandardQueryGet relatedVnf2 =
+ PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "d6557200-ecf2-4641-8094-5393ae3aae60",
+ "", ImmutableMultimap.of());
+
+ PresetAAIStandardQueryGet relatedVnf3 =
+ PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "d6557200-ecf2-4641-8094-5393ae3aae60",
+ "", ImmutableMultimap.of());
+
+ final PresetAAIStandardQueryGet vnfGroup1 =
+ PresetAAIStandardQueryGet.ofInstanceGroup("vnfGroup-type", "Teresa Bradley",
+ ImmutableMultimap.<String, String>builder()
+ .putAll("generic-vnf", relatedVnf1.getReqPath(), relatedVnf2.getReqPath(), relatedVnf3.getReqPath())
+ .build()
+ );
+
+ final PresetAAIStandardQueryGet vnfGroup2 =
+ PresetAAIStandardQueryGet.ofInstanceGroup("vnfGroup-type", "Stanley Mccarthy", ImmutableMultimap.of());
+
+ final PresetAAIStandardQueryGet serviceInstance =
+ PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "7ee41ce4-4827-44b0-a48e-2707a59905d2", "global-customer-id", "service-instance-type",
+ ImmutableMultimap.<String, String>builder()
+ .putAll("instance-group", vnfGroup1.getReqPath(),vnfGroup2.getReqPath())
+ .build()
+ );
+
+ SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
+ serviceInstance,
+ vnfGroup1,vnfGroup2, relatedVnf1, relatedVnf2, relatedVnf3,
+ new PresetAAIModelsByInvariantIdGet(ImmutableList.of("7ee41ce4-4827-44b0-a48e-2707a59905d2", "vnf-instance-model-invariant-id")),
+ new PresetGetSessionSlotCheckIntervalGet(),
+ new PresetAAIGetSubscribersGet(),
+ new PresetSDCGetServiceMetadataGet("4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "7ee41ce4-4827-44b0-a48e-2707a59905d2", "service-vnf-grouping-csar.zip"),
+ new PresetSDCGetServiceToscaModelGet("4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "service-vnf-grouping-csar.zip")
+ ), CLEAR_THEN_SET);
+
+ String expected = TestUtils.convertRequest(objectMapper, "VnfGroup/serviceWithVnfGroupsChildren_serviceInstance.json");
+ expected = expected
+ .replace("SERVICE_INSTANCE_NAME", serviceInstance.getInstanceName())
+ .replace("VNF_GROUP1_INSTANCE_ID", vnfGroup1.getInstanceId())
+ .replace("VNF_GROUP1_INSTANCE_NAME", vnfGroup1.getInstanceName())
+ .replace("VNF_GROUP1_INSTANCE_TYPE", vnfGroup1.getInstanceType())
+ .replace("VNF_GROUP1_INSTANCE_ROLE", vnfGroup1.getInstanceRole())
+
+ .replace("RELATED_VNF1_INSTANCE_ID", relatedVnf1.getInstanceId())
+ .replace("RELATED_VNF1_INSTANCE_NAME", relatedVnf1.getInstanceName())
+ .replace("RELATED_VNF1_INSTANCE_TYPE", relatedVnf1.getInstanceType())
+
+ .replace("RELATED_VNF2_INSTANCE_ID", relatedVnf2.getInstanceId())
+ .replace("RELATED_VNF2_INSTANCE_NAME", relatedVnf2.getInstanceName())
+ .replace("RELATED_VNF2_INSTANCE_TYPE", relatedVnf2.getInstanceType())
+
+ .replace("RELATED_VNF3_INSTANCE_ID", relatedVnf3.getInstanceId())
+ .replace("RELATED_VNF3_INSTANCE_NAME", relatedVnf3.getInstanceName())
+ .replace("RELATED_VNF3_INSTANCE_TYPE", relatedVnf3.getInstanceType())
+
+ .replace("VNF_GROUP2_INSTANCE_ID", vnfGroup2.getInstanceId())
+ .replace("VNF_GROUP2_INSTANCE_NAME", vnfGroup2.getInstanceName())
+ .replace("VNF_GROUP2_INSTANCE_TYPE", vnfGroup2.getInstanceType())
+ .replace("VNF_GROUP2_INSTANCE_ROLE", vnfGroup2.getInstanceRole());
+
+ final String response = restTemplate.getForObject(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
+
+ assertJsonEquals(response, expected);
+ }
+
+ private String randUuid() {
+ return UUID.randomUUID().toString();
+ }
+}
diff --git a/vid-automation/src/test/java/org/onap/vid/api/TestUtils.java b/vid-automation/src/test/java/org/onap/vid/api/TestUtils.java
deleted file mode 100644
index 76c122c48..000000000
--- a/vid-automation/src/test/java/org/onap/vid/api/TestUtils.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.onap.vid.api;
-
-import org.codehaus.jackson.JsonParser;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.SerializationConfig;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-import org.springframework.core.io.support.ResourcePatternResolver;
-import org.springframework.http.HttpStatus;
-
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Response;
-import java.io.File;
-import java.io.IOException;
-import java.util.Map;
-import java.util.Scanner;
-
-/**
- * Created by Oren on 6/7/17.
- */
-public class TestUtils {
-
- protected static ObjectMapper objectMapper = new ObjectMapper();
-
- public static void assertStatusOK(Object request, WebTarget webTarget, Response response) throws IOException {
- assertHttpStatus(request, webTarget, response, HttpStatus.OK);
- }
-
- public static void assertHttpStatus(Object request, WebTarget webTarget, Response response, HttpStatus exceptedHttpStatus) throws IOException {
- objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
-
- org.testng.Assert.assertEquals(response.getStatus(), exceptedHttpStatus.value(),
- String.format("Failed post URI: %s with request %s. Got Status:%d and body: %s",
- webTarget.getUri(),
- objectMapper.writeValueAsString(request),
- response.getStatus(),
- objectMapper.writeValueAsString(response.getEntity())));
- }
-
- public static String convertRequest(ObjectMapper objectMapper, String msoRequestDetailsFileName) {
-
- ClassLoader cl = pProbeMsoApiTest.class.getClassLoader();
- ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl);
- Resource[] resources;
- try {
- resources = resolver.getResources(msoRequestDetailsFileName);
- String content;
- File file = resources[0].getFile();
- content = new Scanner(file).useDelimiter("\\Z").next();
- objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
- return objectMapper.writeValueAsString(objectMapper.readValue(content, Object.class));
- }
- catch (IOException e) {
- e.printStackTrace();
- throw new RuntimeException(e);
- }
- }
-
- public static String getNestedPropertyInMap(Object item, String path) {
- return getNestedPropertyInMap(item, path, String.class, "/");
- }
-
- public static <T> T getNestedPropertyInMap(Object item, String path, Class<T> valueType) {
- return getNestedPropertyInMap(item, path, valueType, "/");
- }
-
- /*
- Use this method to extract item from Map that represent Json hierarchy (Map<String,Map>)
- */
- public static <T> T getNestedPropertyInMap(Object item, String path, Class<T> valueType, String delimeter) {
- String[] pathes = path.split(delimeter);
- return valueType.cast(getNestedPropertyInMap(item,pathes,0));
- }
-
- private static Object getNestedPropertyInMap(Object item, String[] pathes, int index) {
- if (index==pathes.length) {
- return item;
- }
- return getNestedPropertyInMap(((Map<String,Object>)item).get(pathes[index]), pathes, ++index);
- }
-}
diff --git a/vid-automation/src/test/java/org/onap/vid/api/VersionControllerApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/VersionControllerApiTest.java
new file mode 100644
index 000000000..4dc799193
--- /dev/null
+++ b/vid-automation/src/test/java/org/onap/vid/api/VersionControllerApiTest.java
@@ -0,0 +1,26 @@
+package org.onap.vid.api;
+
+import org.junit.Assert;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.RestTemplate;
+import org.testng.annotations.Test;
+
+import java.util.HashMap;
+
+public class VersionControllerApiTest extends BaseApiTest {
+
+ @Test
+ public void probeRequest_returnsResponseAsExpected() {
+ // without log-in
+ ResponseEntity<HashMap<String, String>> response = new RestTemplate().exchange(
+ uri + "/version",
+ org.springframework.http.HttpMethod.GET,
+ null,
+ new ParameterizedTypeReference<HashMap<String, String>>() {
+ });
+ HashMap<String,String> versionResults = response.getBody();
+ Assert.assertNotNull(versionResults.get("features"));
+ Assert.assertNotNull(versionResults.get("build"));
+ }
+}
diff --git a/vid-automation/src/test/java/org/onap/vid/api/VidConfigurationApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/VidConfigurationApiTest.java
index 38ce8613d..ec479d900 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/VidConfigurationApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/VidConfigurationApiTest.java
@@ -4,6 +4,7 @@ import org.springframework.http.ResponseEntity;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import static java.util.Collections.singletonList;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
diff --git a/vid-automation/src/test/java/org/onap/vid/api/pProbeAaiApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/pProbeAaiApiTest.java
index 1765645af..db10fdc57 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/pProbeAaiApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/pProbeAaiApiTest.java
@@ -1,6 +1,13 @@
package org.onap.vid.api;
+import static vid.automation.test.services.SimulatorApi.RegistrationStrategy;
+import static vid.automation.test.services.SimulatorApi.registerExpectation;
+
import com.google.common.collect.ImmutableMap;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
import org.apache.commons.text.StringEscapeUtils;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
@@ -9,14 +16,6 @@ import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-
-import static vid.automation.test.services.SimulatorApi.RegistrationStrategy;
-import static vid.automation.test.services.SimulatorApi.registerExpectation;
-
public class pProbeAaiApiTest extends BaseApiAaiTest {
@@ -36,7 +35,7 @@ public class pProbeAaiApiTest extends BaseApiAaiTest {
//URIs
private static final String GET_SERVICE_INSTANCE_PNFS = "aai_get_service_instance_pnfs/31739f3e-526b-11e6-beb8-9e71128cae77/AIM Transport/f36f5734-e9df-4fbf-9f35-61be13f028a1";
private static final String GET_SPECIFIC_PNF_URI = "aai_get_pnfs/pnf/DEAAI78";
- private static final String GET_PNF_BY_REGION = "aai_get_pnf_instances/e433710f-9217-458d-a79d-1c7aff376d89/VIRTUAL USP/8a84e59b-45fe-4851-8ff1-34225a0b32c3/83b458fd-5dd3-419b-a9e3-7335814a0911/AAIAIC25/Cisco/Nexus 3048-TP";
+ private static final String GET_PNF_BY_REGION = "aai_get_pnf_instances/e433710f-9217-458d-a79d-1c7aff376d89/TYLER SILVIA/8a84e59b-45fe-4851-8ff1-34225a0b32c3/83b458fd-5dd3-419b-a9e3-7335814a0911/JANET25/Cisco/Nexus 3048-TP";
@@ -109,7 +108,7 @@ public class pProbeAaiApiTest extends BaseApiAaiTest {
@Test
public void testGetPnfDataByRegion() throws Exception {
- String expected = "{\"results\":[{\"id\":\"901128280\",\"url\":\"/aai/v12/network/pnfs/pnf/AS-pnf2-10219--as988q\",\"properties\":{\"pnfName\":\"AS-pnf2-10219--as988q\",\"equipType\":\"Switch\",\"equipVendor\":\"Cisco\",\"equipModel\":\"Nexus3048-TP\",\"inMaint\":false,\"resourceVersion\":\"1508776538192\"},\"nodeType\":\"pnf\",\"relatedTo\":[{\"id\":\"532488360\",\"url\":\"/aai/v12/business/customers/customer/customer-10219-as988q/service-subscriptions/service-subscription/serviceSub2-test-10219-as988q/service-instances/service-instance/serviceIns2-test-10219-as988q\",\"nodeType\":\"service-instance\",\"relationshipLabel\":\"uses\"},{\"id\":\"860164248\",\"url\":\"/aai/v12/cloud-infrastructure/complexes/complex/complex-10219--as988q\",\"nodeType\":\"complex\",\"relationshipLabel\":\"locatedIn\"}]}],\"additionalProperties\":{}}";
+ String expected = "{\"results\":[{\"id\":\"901128280\",\"url\":\"/aai/v12/network/pnfs/pnf/AS-pnf2-10219--as988q\",\"properties\":{\"pnfName\":\"AS-pnf2-10219--as988q\",\"equipType\":\"Switch\",\"equipVendor\":\"Cisco\",\"equipModel\":\"Nexus3048-TP\",\"inMaint\":false,\"resourceVersion\":\"1508776538192\"},\"nodeType\":\"pnf\",\"relatedTo\":[{\"id\":\"532488360\",\"url\":\"/aai/v12/business/customers/customer/customer-10219-as988q/service-subscriptions/service-subscription/serviceSub2-test-10219-as988q/service-instances/service-instance/serviceIns2-test-10219-as988q\",\"node-type\":\"service-instance\",\"relationship-label\":\"uses\"},{\"id\":\"860164248\",\"url\":\"/aai/v12/cloud-infrastructure/complexes/complex/complex-10219--as988q\",\"node-type\":\"complex\",\"relationship-label\":\"locatedIn\"}]}]}";
callAaiWithSimulatedErrorResponse(GET_PNF_BY_REGION_RESPONSE,
ImmutableMap.of(),
buildUri(GET_PNF_BY_REGION), "",200,expected, HttpMethod.GET);
@@ -136,7 +135,7 @@ public class pProbeAaiApiTest extends BaseApiAaiTest {
@Test
public void testGetPnfDataByRegionNoResults() throws IOException, URISyntaxException {
final String registratedResult = "{\"results\":[]}";
- final String expectedResult ="{\"results\":[],\"additionalProperties\":{}}";
+ final String expectedResult ="{\"results\":[]}";
final int expectedResponseCode = 200;
callAaiWithSimulatedErrorResponse(GET_PNF_BY_REGION_RESPONSE_EMPTY,
ImmutableMap.of("500", Integer.toString(expectedResponseCode),"\"ERROR_PAYLOAD\"", StringEscapeUtils.escapeJson(registratedResult)),
diff --git a/vid-automation/src/test/java/org/onap/vid/api/pProbeMsoApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/pProbeMsoApiTest.java
index c082ef95a..534dc6934 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/pProbeMsoApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/pProbeMsoApiTest.java
@@ -1,7 +1,11 @@
package org.onap.vid.api;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import org.apache.commons.text.StringEscapeUtils;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
+import org.onap.simulator.presetGenerator.presets.mso.configuration.PresetMSOActOnConfiguration;
+import org.onap.simulator.presetGenerator.presets.mso.configuration.PresetMSOCreateConfiguration;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.testng.annotations.Test;
@@ -15,7 +19,7 @@ public class pProbeMsoApiTest extends BaseMsoApiTest{
private static final String MSO_REMOVE_RELATIONSHIP = "/mso/mso_remove_relationship/f36f5734-e9df-4fbf-9f35-61be13f028a1";
private static final String MSO_ADD_RELATIONSHIP = "/mso/mso_add_relationship/f36f5734-e9df-4fbf-9f35-61be13f028a1";
public static final String MSO_CREATE_CONFIGURATION = "mso/mso_create_configuration_instance/f36f5734-e9df-4fbf-9f35-61be13f028a1/configurations/";
- public static final String MSO_ACTIVATE_CONFIGURATION = "mso/mso_activate_configuration/f36f5734-e9df-4fbf-9f35-61be13f028a1/configurations/a53c9ca8-8986-44da-9e5e-9e4179e6c78a";
+ public static final String MSO_ACTIVATE_CONFIGURATION = "mso/mso_activate_configuration/c187e9fe-40c3-4862-b73e-84ff056205f6/configurations/9533-config-LB1113";
@@ -24,15 +28,12 @@ public class pProbeMsoApiTest extends BaseMsoApiTest{
//Request Details
private static final String CREATE_CONFIGURATION_REQUEST_DETAILS = "registration_to_simulator/body_jsons/mso_request_create_configuration.json";
-
+ private static final String ACTIVATE_CONFIGURATION_REQUEST_DETAILS = "registration_to_simulator/body_jsons/mso_request_activate_configuration.json";
//Jsons
private static final String DISSOCIATE_OK_JSON = "dissociate_pnf_from_service_instance.json";
private static final String DISSOCIATE_FAILED_JSON = "dissociate_pnf_from_service_instance_error.json";
private static final String ASSOCIATE_OK_JSON = "mso_add_relationships.json";
private static final String ASSOCIATE_FAILED_JSON = "mso_add_relationships_error.json";
- private static final String CREATE_CONFIGURATION_OK_JSON = "mso_create_configurations.json";
- private static final String CREATE_CONFIGURATION_FAILED_JSON = "mso_create_configurations_error.json";
- private static final String ACTIVATE_CONFIGURATION_OK_JSON = "mso_activate_configurations.json";
//Expected Responses
private static final String EXPECTED_SUCCESS_MSO_RESPONSE = "{\"requestReferences\": {\"instanceId\": \"f36f5734-e9df-4fbf-9f35-61be13f028a1\", \"requestId\": \"b6dc9806-b094-42f7-9386-a48de8218ce8\"}}";
@@ -73,25 +74,31 @@ public class pProbeMsoApiTest extends BaseMsoApiTest{
@Test
public void testCreateConfigurationSucceed() throws Exception {
String requestBody = TestUtils.convertRequest(objectMapper, CREATE_CONFIGURATION_REQUEST_DETAILS);
- callMsoWithFineRequest(CREATE_CONFIGURATION_OK_JSON, ImmutableMap.of(), buildUri(MSO_CREATE_CONFIGURATION),
- requestBody, HttpStatus.ACCEPTED.value(),EXPECTED_SUCCESS_MSO_RESPONSE , HttpMethod.POST);
+ callMsoWithFineRequest(ImmutableList.of(
+ new PresetMSOCreateConfiguration("f36f5734-e9df-4fbf-9f35-61be13f028a1"),
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_AAIAIC25_TO_ATT_AIC
+ ),
+ buildUri(MSO_CREATE_CONFIGURATION), requestBody,
+ HttpStatus.ACCEPTED.value(), EXPECTED_SUCCESS_MSO_RESPONSE, HttpMethod.POST);
}
@Test
public void testActivateConfigurationSucceed() throws Exception {
- String requestBody = "" +
- "{" +
- " \"val\": \"dummy payload\"" +
- "}";
- callMsoWithFineRequest(ACTIVATE_CONFIGURATION_OK_JSON, ImmutableMap.of(), buildUri(MSO_ACTIVATE_CONFIGURATION),
- requestBody, HttpStatus.ACCEPTED.value(),EXPECTED_SUCCESS_MSO_RESPONSE , HttpMethod.POST);
+ String requestBody = TestUtils.convertRequest(objectMapper, ACTIVATE_CONFIGURATION_REQUEST_DETAILS);
+ callMsoWithFineRequest(ImmutableList.of(
+ new PresetMSOActOnConfiguration("activate", "b6dc9806-b094-42f7-9386-a48de8218ce8", "f36f5734-e9df-4fbf-9f35-61be13f028a1"),
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MDT1_TO_ATT_NC
+ ),
+ buildUri(MSO_ACTIVATE_CONFIGURATION),
+ requestBody, HttpStatus.ACCEPTED.value(), EXPECTED_SUCCESS_MSO_RESPONSE, HttpMethod.POST);
}
@Test(dataProvider = "errorCodes")
public void testCreateConfigurationError(int errorCode) throws IOException, URISyntaxException {
String requestBody = TestUtils.convertRequest(objectMapper, CREATE_CONFIGURATION_REQUEST_DETAILS);
- callMsoWithSimulatedErrorResponse(CREATE_CONFIGURATION_FAILED_JSON,
- ImmutableMap.of("\"<ERROR_CODE>\"", Integer.toString(errorCode),"\"<ERROR_PAYLOAD>\"", StringEscapeUtils.escapeJson(EXPECTED_ERROR_MSO_RESPONSE)),
+ callMsoWithSimulatedErrorResponse(ImmutableList.of(
+ new PresetMSOCreateConfiguration("f36f5734-e9df-4fbf-9f35-61be13f028a1", errorCode, EXPECTED_ERROR_MSO_RESPONSE),
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_AAIAIC25_TO_ATT_AIC),
buildUri(MSO_CREATE_CONFIGURATION), requestBody,errorCode,EXPECTED_ERROR_MSO_RESPONSE,HttpMethod.POST);
}
@@ -99,8 +106,9 @@ public class pProbeMsoApiTest extends BaseMsoApiTest{
@Test
public void testCreateConfigurationFail() throws Exception {
String requestBody = "498/*ht5ru7 mjhnb";
- callMsoWithSimulatedErrorResponse(CREATE_CONFIGURATION_FAILED_JSON,
- ImmutableMap.of("\"<ERROR_CODE>\"", 500),
+ callMsoWithSimulatedErrorResponse(ImmutableList.of(
+ new PresetMSOCreateConfiguration("f36f5734-e9df-4fbf-9f35-61be13f028a1", 500, EXPECTED_ERROR_MSO_RESPONSE),
+ PresetAAIGetCloudOwnersByCloudRegionId.PRESET_AAIAIC25_TO_ATT_AIC),
buildUri(MSO_CREATE_CONFIGURATION), requestBody,500,EXPECTED_ERROR_MSO_RESPONSE,HttpMethod.POST);
}