summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java89
-rw-r--r--openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/deserializers/RequirementDefinitionDeserializer.java87
-rw-r--r--openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/json/JsonUtil.java15
-rw-r--r--openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-core/src/main/java/org/openecomp/sdc/healing/impl/HealingManagerImpl.java2
-rw-r--r--openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/converter/impl/ToscaConverterImplTest.java80
5 files changed, 240 insertions, 33 deletions
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java
index 4167785c02..9e4d3bf51b 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java
@@ -405,58 +405,101 @@ public class VendorSoftwareProductsImpl implements VendorSoftwareProducts {
List<VersionedVendorSoftwareProductInfo> vspList = Objects.requireNonNull(
vendorSoftwareProductManager.listVsps(VersionStatus.Final.name(), user));
+ int skippedCounter = 0;
+ final int vspListSizeBefore = vspList.size();
+
+ for (VersionedVendorSoftwareProductInfo versionVspInfo : vspList) {
+ final VspDetails vspDetails = versionVspInfo.getVspDetails();
+ final String vspId = vspDetails.getId();
+ final Version latestFinalVersion =
+ getVersionInfo(vspId, VersionableEntityAction.Read, user).getLatestFinalVersion();
+
+ if (latestFinalVersion.getStatus().equals(VersionStatus.Locked)) {
+ logger.info("Skipping processing VSP name [{}]/id [{}] due to status LOCKED", vspDetails
+ .getName(),
+ vspId);
+ skippedCounter++;
+ vspList.remove(versionVspInfo);
+ }
+ }
+
+ logger.info("Removed {} VSPs out of {} from processing due to status LOCKED", skippedCounter,
+ vspListSizeBefore);
int healingCounter = 0;
int failedCounter = 0;
+ int totalCounter = 0;
- try {
- logger.info("Total number of VSPs: {}. Performing healing and " +
- "resubmit for all non-Manual VSPs in submitted status.\n No need to pre-set oldVersion " +
- "field", vspList.size());
-
- for (VersionedVendorSoftwareProductInfo versionVspInfo : vspList) {
+ final int vspListSize = vspList.size();
+ logger.info("Total number of VSPs: {}. Performing healing and " +
+ "resubmit for all non-Manual VSPs in submitted status.\n No need to pre-set oldVersion " +
+ "field", vspListSize);
+ for (VersionedVendorSoftwareProductInfo versionVspInfo : vspList) {
+ try {
+ totalCounter++;
+ final Version activeVersion = versionVspInfo.getVersionInfo().getActiveVersion();
final VspDetails vspDetails = versionVspInfo.getVspDetails();
final String vspId = vspDetails.getId();
final Version latestFinalVersion =
getVersionInfo(vspId, VersionableEntityAction.Read, user).getLatestFinalVersion();
+ final String vspName = vspDetails.getName();
+ logger.info("VSP Name {}, VSP id [{}], Active Version {} , Active Version Status {}," +
+ "Latest Final Version {} , " +
+ "Latest Final Version Status {}", vspName, vspId, activeVersion
+ .toString(),
+ activeVersion.getStatus(), latestFinalVersion.toString(),
+ latestFinalVersion.getStatus());
+
if (Objects.nonNull(latestFinalVersion) &&
(!OnboardingMethod.Manual.name().equals(vspDetails.getOnboardingMethod()))) {
- reSubmit(vspDetails, user);
+ reSubmit(vspDetails, user, totalCounter, vspListSize);
healingCounter++;
}
+ } catch (Exception e) {
+ failedCounter++;
}
-
- } catch (Exception e) {
- logger.error("Failed during resubmitAll", e);
- failedCounter++;
- } finally {
- logger.info("Finished attempted healing and resubmit for {} VSPs out " +
- "of total # of {} submitted VSPs. Failure count during resubmitAll: {}",
- healingCounter, vspList.size(), failedCounter);
}
+ logger.info("Total VSPs processed {}. Completed running healing and resubmit for {} VSPs out" +
+ " " +
+ "of total # of {} submitted VSPs. Failures count during resubmitAll: {}",
+ totalCounter, healingCounter, vspListSize, failedCounter);
+
return Response.ok().build();
}
- private void reSubmit(VspDetails vspDetails, String user) throws IOException {
+ private void reSubmit(VspDetails vspDetails, String user, int currentCount, int total) throws
+ Exception {
final String vspId = vspDetails.getId();
- long startTime = System.currentTimeMillis();
- logger.info("Starting on healing and resubmit for VSP id[{}]", vspId);
+ final String vspName = vspDetails.getName();
+ final Version versionBefore = vspDetails.getVersion();
+ Version finalVersion;
+
+ logger.info("Starting on healing and resubmit for VSP [{}], #{} out of total {}", vspName,
+ currentCount, total);
vspDetails.setOldVersion("true");
- vendorSoftwareProductManager.healAndAdvanceFinalVersion(vspId, vspDetails, user);
+ try {
+ finalVersion =
+ vendorSoftwareProductManager.healAndAdvanceFinalVersion(vspId, vspDetails, user);
- long endTime = System.currentTimeMillis();
- long seconds = (endTime - startTime) / 1000;
+ } catch (Exception e) {
+
+ logger.error("Failed during resubmit, VSP [{}] , version before:{}, version after:{}, " +
+ "status after:{}, with exception:{}",
+ vspName, versionBefore.toString(), vspDetails.getVersion().toString(), vspDetails
+ .getVersion().getStatus().name(), e.getMessage());
+ throw e;
+ }
- logger.info("Completed healing and resubmit for VSP id [{}], duration: {} seconds",
- vspId, seconds);
+ logger.info("Completed healing and resubmit for VSP [{}], version before:{}, version after:" +
+ " {}", vspName, versionBefore.toString(), finalVersion);
}
private static void printAuditForErrors(List<ErrorMessage> errorList, String vspId,
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/deserializers/RequirementDefinitionDeserializer.java b/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/deserializers/RequirementDefinitionDeserializer.java
new file mode 100644
index 0000000000..b341a52c56
--- /dev/null
+++ b/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/deserializers/RequirementDefinitionDeserializer.java
@@ -0,0 +1,87 @@
+package org.openecomp.core.utilities.deserializers;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParseException;
+import com.google.gson.JsonPrimitive;
+import org.openecomp.sdc.tosca.datatypes.model.RequirementDefinition;
+
+import java.lang.reflect.Type;
+import java.util.Objects;
+import java.util.Optional;
+
+public class RequirementDefinitionDeserializer implements JsonDeserializer<RequirementDefinition> {
+
+ private static final String CAPABILITY = "capability";
+ private static final String NODE = "node";
+ private static final String RELATIONSHIP = "relationship";
+ private static final String OCCURRENCES = "occurrences";
+
+ @Override
+ public RequirementDefinition deserialize(JsonElement jsonElement, Type type,
+ JsonDeserializationContext jsonDeserializationContext)
+ throws JsonParseException {
+
+ JsonObject jsonObject = jsonElement.getAsJsonObject();
+
+ RequirementDefinition requirementDefinition = new RequirementDefinition();
+ setRequirementValues(jsonObject, requirementDefinition);
+
+ Optional<Object[]> occurrences = handleOccurrences(jsonObject);
+ occurrences.ifPresent(requirementDefinition::setOccurrences);
+
+ return requirementDefinition;
+ }
+
+
+ private void setRequirementValues(JsonObject jsonObject,
+ RequirementDefinition requirementDefinition) {
+
+ JsonElement capabilityElement = jsonObject.get(CAPABILITY);
+ if (!Objects.isNull(capabilityElement)) {
+ requirementDefinition.setCapability(capabilityElement.getAsString());
+ }
+
+ JsonElement nodeElement = jsonObject.get(NODE);
+ if (!Objects.isNull(nodeElement)) {
+ requirementDefinition.setNode(nodeElement.getAsString());
+ }
+
+ JsonElement relationshipElement = jsonObject.get(RELATIONSHIP);
+ if (!Objects.isNull(relationshipElement)) {
+ requirementDefinition.setRelationship(relationshipElement.getAsString());
+ }
+ }
+
+ private Optional<Object[]> handleOccurrences(JsonObject jsonObject) {
+
+ JsonElement occurrencesElement = jsonObject.get(OCCURRENCES);
+
+ if(Objects.isNull(occurrencesElement)){
+ return Optional.empty();
+ }
+
+ JsonArray occurrences = occurrencesElement.getAsJsonArray();
+ Object[] fixedOccurrences = new Object[occurrences.size()];
+
+ for (int i = 0; i < occurrences.size(); i++) {
+ JsonElement currElement = occurrences.get(i);
+
+ // values inside occurrences array can be either String or Integer
+ if (currElement.isJsonPrimitive()) {
+ JsonPrimitive jsonPrimitive = currElement.getAsJsonPrimitive();
+
+ if (jsonPrimitive.isNumber()) {
+ fixedOccurrences[i] = jsonPrimitive.getAsNumber().intValue();
+ } else {
+ fixedOccurrences[i] = jsonPrimitive.getAsString();
+ }
+ }
+ }
+
+ return Optional.of(fixedOccurrences);
+ }
+}
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/json/JsonUtil.java b/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/json/JsonUtil.java
index 8454bc61a8..c3d32df447 100644
--- a/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/json/JsonUtil.java
+++ b/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/json/JsonUtil.java
@@ -32,8 +32,10 @@ import org.everit.json.schema.ValidationException;
import org.everit.json.schema.loader.SchemaLoader;
import org.json.JSONObject;
import org.openecomp.core.utilities.CommonMethods;
+import org.openecomp.core.utilities.deserializers.RequirementDefinitionDeserializer;
import org.openecomp.sdc.logging.api.Logger;
import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.openecomp.sdc.tosca.datatypes.model.RequirementDefinition;
import java.io.BufferedReader;
import java.io.IOException;
@@ -51,6 +53,15 @@ import java.util.stream.Collectors;
*/
public class JsonUtil {
private static final Logger logger = LoggerFactory.getLogger(JsonUtil.class);
+ private static final GsonBuilder gsonBuilder;
+ private static final Gson gson;
+
+ static {
+ gsonBuilder = new GsonBuilder();
+ gsonBuilder.registerTypeAdapter(RequirementDefinition.class, new
+ RequirementDefinitionDeserializer());
+ gson = gsonBuilder.create();
+ }
/**
* Object 2 json string.
@@ -86,9 +97,7 @@ public class JsonUtil {
T typ;
try {
try (Reader br = new StringReader(json)) {
- typ = new Gson().fromJson(br, classOfT);
- } catch (IOException exception) {
- throw exception;
+ typ = gson.fromJson(br, classOfT);
}
} catch (JsonIOException | JsonSyntaxException | IOException exception) {
throw new RuntimeException(exception);
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-core/src/main/java/org/openecomp/sdc/healing/impl/HealingManagerImpl.java b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-core/src/main/java/org/openecomp/sdc/healing/impl/HealingManagerImpl.java
index 16f9c60d7f..1c895ffc6f 100644
--- a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-core/src/main/java/org/openecomp/sdc/healing/impl/HealingManagerImpl.java
+++ b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-core/src/main/java/org/openecomp/sdc/healing/impl/HealingManagerImpl.java
@@ -92,7 +92,7 @@ public class HealingManagerImpl implements HealingManager {
MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
LoggerTragetServiceName.SELF_HEALING, ErrorLevel.ERROR.name(), LoggerErrorCode
.DATA_ERROR.getErrorCode(), LoggerErrorDescription.CANT_HEAL);
- healingFailureMessages.add(e.getMessage());
+ healingFailureMessages.add(e.getMessage() + " ,healer name :" + healerImplClassName);
}
return null;
}
diff --git a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/converter/impl/ToscaConverterImplTest.java b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/converter/impl/ToscaConverterImplTest.java
index 4abed3e316..f29ca4a427 100644
--- a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/converter/impl/ToscaConverterImplTest.java
+++ b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/converter/impl/ToscaConverterImplTest.java
@@ -1,26 +1,30 @@
package org.openecomp.core.converter.impl;
import org.apache.commons.collections.CollectionUtils;
+import org.junit.Assert;
import org.junit.Test;
import org.openecomp.core.converter.ToscaConverter;
import org.openecomp.core.impl.ToscaConverterImpl;
import org.openecomp.core.utilities.file.FileContentHandler;
import org.openecomp.core.utilities.file.FileUtils;
+import org.openecomp.core.utilities.json.JsonUtil;
import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
+import org.openecomp.sdc.tosca.datatypes.model.NodeType;
import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment;
+import org.openecomp.sdc.tosca.datatypes.model.RequirementDefinition;
import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
import org.openecomp.sdc.tosca.services.ToscaExtensionYamlUtil;
import org.openecomp.sdc.tosca.services.YamlUtil;
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.NotDirectoryException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.ListIterator;
@@ -33,7 +37,10 @@ import static org.openecomp.core.converter.datatypes.Constants.mainStName;
public class ToscaConverterImplTest {
- private static ToscaConverter toscaConverter = new ToscaConverterImpl();
+ private static final ToscaConverter toscaConverter = new ToscaConverterImpl();
+ private static final String VIRTUAL_LINK = "virtualLink";
+ private static final String UNBOUNDED = "UNBOUNDED";
+
private static String inputFilesPath;
private static String outputFilesPath;
private static Map<String, ServiceTemplate> expectedOutserviceTemplates;
@@ -57,7 +64,72 @@ public class ToscaConverterImplTest {
checkSTResults(expectedOutserviceTemplates, null, mainSt);
}
+ @Test
+ public void testOccurrencesUpperString() {
+ Object[] occurrences = buildOccurrences("0", UNBOUNDED);
+ Assert.assertEquals(occurrences[0], 0);
+ Assert.assertEquals(occurrences[1], UNBOUNDED);
+ }
+
+ @Test
+ public void testOccurrencesAsInts() {
+ Object[] occurrences = buildOccurrences("0", "1");
+ Assert.assertEquals(occurrences[0], 0);
+ Assert.assertEquals(occurrences[1], 1);
+ }
+
+ @Test
+ public void testOccurrencesAsStrings() {
+ String test = "TEST_A";
+ Object[] occurrences = buildOccurrences(UNBOUNDED, test);
+ Assert.assertEquals(occurrences[0], UNBOUNDED);
+ Assert.assertEquals(occurrences[1], test);
+ }
+
+ @Test
+ public void testOccurrencesLowerString() {
+ Object[] occurrences = buildOccurrences(UNBOUNDED, "100");
+ Assert.assertEquals(occurrences[0], UNBOUNDED);
+ Assert.assertEquals(occurrences[1], 100);
+ }
+
+ @Test
+ public void testOccurrencesEmpty() {
+ Object[] occurrences = buildOccurrences();
+ Assert.assertEquals(occurrences.length, 0);
+ }
+
+ @Test
+ public void testOccurrencesMany() {
+ String test = "TEST_B";
+ Object[] occurrences = buildOccurrences("1", "2", test);
+ Assert.assertEquals(occurrences[0], 1);
+ Assert.assertEquals(occurrences[1], 2);
+ Assert.assertEquals(occurrences[2], test);
+ }
+
+ @Test
+ public void testDefaultOccurrences() {
+ Object[] occurrences = buildOccurrences((List<String>) null);
+ Assert.assertEquals(1, occurrences[0]);
+ Assert.assertEquals(1, occurrences[1]);
+ }
+
+ private Object[] buildOccurrences(String... bounds) {
+ return buildOccurrences(Arrays.asList(bounds));
+ }
+ private Object[] buildOccurrences(List<String> bounds) {
+ NodeType nodeType = JsonUtil.json2Object("{derived_from=tosca.nodes.Root, description=MME_VFC, " +
+ "properties={vendor={type=string, default=ERICSSON}, " +
+ "csarVersion={type=string, default=v1.0}, csarProvider={type=string, default=ERICSSON}, " +
+ "id={type=string, default=vMME}, version={type=string, default=v1.0}, csarType={type=string, default=NFAR}}, " +
+ "requirements=[{virtualLink={" +
+ (bounds == null ? "" : "occurrences=[" + String.join(", ", bounds) + "], ") +
+ "capability=tosca.capabilities.network.Linkable}}]}", NodeType.class);
+ List<Map<String, RequirementDefinition>> requirements = nodeType.getRequirements();
+ return requirements.get(0).get(VIRTUAL_LINK).getOccurrences();
+ }
private FileContentHandler createFileContentHandlerFromInput(String inputFilesPath)
throws IOException {
@@ -141,10 +213,6 @@ public class ToscaConverterImplTest {
yamlFile.close();
} catch (IOException ignore) {
}
- } catch (FileNotFoundException e) {
- throw e;
- } catch (IOException e) {
- throw e;
}
}
}