From 85dda672f8d9a3bed20ca36852fa6e94c378f5b4 Mon Sep 17 00:00:00 2001 From: Norm Traxler Date: Fri, 1 Feb 2019 16:56:25 +0000 Subject: Ctx Builder l3-network support Issue-ID: SDNC-475 Network Discovery Ctx Builder to support l3-network attribute mapping to common model. Fix jenkins JUnit failures Change-Id: I64ded411a74ffb037df17a047c16e210d41c4992 Signed-off-by: Norm Traxler --- config/jolt/l3-networkSpec.json | 49 ++++ config/jolt/sdToModelContextSpec.json | 24 +- config/jolt/sdToNdResourcesSpec.json | 22 ++ config/jolt/vserverSpec.json | 61 +++++ .../service/SpringServiceImpl.java | 191 ++++++--------- .../service/rs/RestServiceImpl.java | 30 ++- .../networkdiscovery/util/TransformationUtil.java | 50 ++++ .../test/jolt/TransformationTest.java | 123 +++++++++- .../jolt/networkDiscoveryL3NetworkResponse.json | 59 +++++ ...etworkDiscoveryL3NetworkToNetwork-expected.json | 15 ++ .../jolt/networkDiscoveryVserverResponse.json | 99 ++++++++ .../jolt/networkDiscoveryVserverToVm-expected.json | 38 +++ .../resources/jolt/serviceDecompResponse2.json | 263 +++++++++++++++++++++ .../jolt/serviceDecompToModelContext-expected.json | 70 +++--- .../serviceDecompToModelContext2-expected.json | 149 ++++++++++++ .../jolt/serviceDecompToNdResources2-expected.json | 39 +++ 16 files changed, 1104 insertions(+), 178 deletions(-) create mode 100644 config/jolt/l3-networkSpec.json create mode 100644 config/jolt/vserverSpec.json create mode 100644 src/main/java/org/onap/pomba/contextbuilder/networkdiscovery/util/TransformationUtil.java create mode 100644 src/test/resources/jolt/networkDiscoveryL3NetworkResponse.json create mode 100644 src/test/resources/jolt/networkDiscoveryL3NetworkToNetwork-expected.json create mode 100644 src/test/resources/jolt/networkDiscoveryVserverResponse.json create mode 100644 src/test/resources/jolt/networkDiscoveryVserverToVm-expected.json create mode 100644 src/test/resources/jolt/serviceDecompResponse2.json create mode 100644 src/test/resources/jolt/serviceDecompToModelContext2-expected.json create mode 100644 src/test/resources/jolt/serviceDecompToNdResources2-expected.json diff --git a/config/jolt/l3-networkSpec.json b/config/jolt/l3-networkSpec.json new file mode 100644 index 0000000..8924920 --- /dev/null +++ b/config/jolt/l3-networkSpec.json @@ -0,0 +1,49 @@ +[ + // This section converts the json from network discovery micro-service + // to org.onap.pomba.audit.common.model.Network + + { + "operation": "shift", + "spec": { + "resources": { + "*": { + "id": "uuid", + "name": "name", + "dataQuality": "dataQuality", + "attributeList": { + "*": { + // filter the Network Discovery attributes that we want to keep, to a temporary list: + "name": { + "sharedNetwork": { + "@2": "tempList[]" + } + } + } + } + } + } + } + } + , + { + // Convert the attribute names to common model names. + "operation": "shift", + "spec": { + "tempList": { + "*": { + "name" : { + "sharedNetwork": { + "#sharedNetworkBoolean": "attributeList[#4].name" + } + }, + "*" : { + "@" : "attributeList[#3].&" + } + } + }, + "*": { + "@" : "&" + } + } + } +] diff --git a/config/jolt/sdToModelContextSpec.json b/config/jolt/sdToModelContextSpec.json index 88201a7..77a71f1 100644 --- a/config/jolt/sdToModelContextSpec.json +++ b/config/jolt/sdToModelContextSpec.json @@ -7,8 +7,13 @@ "operation": "shift", "spec": { "service-instance-id": "service.uuid", - "generic-vnfs": { + "l3-networks": { "*": { + "network-id": "networkList[&1].uuid" + } + }, + "generic-vnfs": { + "*": { "vservers": { "*": { "vserver-id": "vnfList[&3].vfModuleList[0].vmList[&1].uuid" @@ -16,9 +21,20 @@ }, "l3-networks": { "*": { - "network-id": "vnfList[&3].vfModuleList[0].networkList[&1].uuid" + "network-id": "vnfList[&3].networkList[&1].uuid" } }, + "vf-modules": { + "vf-module": { + "*": { + "l3-networks" : { + "*": { + "network-id": "vnfList[&6].vfModuleList[0].networkList[&1].uuid" + } + } + } + } + }, "vnfcs": { "*": { "vnfc-id": "vnfList[&3].vnfcList[&1].uuid" @@ -27,5 +43,5 @@ } } } - } - ] + } +] diff --git a/config/jolt/sdToNdResourcesSpec.json b/config/jolt/sdToNdResourcesSpec.json index c7d7496..bce2d68 100644 --- a/config/jolt/sdToNdResourcesSpec.json +++ b/config/jolt/sdToNdResourcesSpec.json @@ -6,6 +6,14 @@ // to org.onap.pomba.contextbuilder.networkdiscovery.model.NdResources "operation": "shift", "spec": { + "l3-networks": { + "*": { + "network-id": { + "@": "tempResourceId", + "#l3-network": "tempResourceType" + } + } + }, "generic-vnfs": { "*": { "vservers": { @@ -16,6 +24,20 @@ } }}, + "vf-modules": { + "vf-module": { + "*": { + "l3-networks": { + "*": { + "network-id": { + "@": "tempResourceId", + "#l3-network": "tempResourceType" + } + } + } + } + } + }, "l3-networks": { "*": { "network-id": { diff --git a/config/jolt/vserverSpec.json b/config/jolt/vserverSpec.json new file mode 100644 index 0000000..00659cd --- /dev/null +++ b/config/jolt/vserverSpec.json @@ -0,0 +1,61 @@ +[ + // This section converts the json from network discovery micro-service + // to org.onap.pomba.audit.common.model.VM + + { + "operation": "shift", + "spec": { + "resources": { + "*": { + "id": "uuid", + "name": "name", + "dataQuality": "dataQuality", + "attributeList": { + "*": { + // filter the Network Discovery attributes that we want to keep, to a temporary list: + "name": { + "inMaintenance": { + "@2": "tempList[]" + }, + "hostname": { + "@2": "tempList[]" + }, + "imageId": { + "@2": "tempList[]" + } + } + } + } + } + } + } + } + , + { + // Convert the attribute names to common model names. + "operation": "shift", + "spec": { + "tempList": { + "*": { + "name" : { + "inMaintenance": { + "#lockedBoolean": "attributeList[#4].name" + }, + "hostname": { + "#hostName": "attributeList[#4].name" + }, + "imageId": { + "#imageId": "attributeList[#4].name" + } + }, + "*" : { + "@" : "attributeList[#3].&" + } + } + }, + "*": { + "@" : "&" + } + } + } +] diff --git a/src/main/java/org/onap/pomba/contextbuilder/networkdiscovery/service/SpringServiceImpl.java b/src/main/java/org/onap/pomba/contextbuilder/networkdiscovery/service/SpringServiceImpl.java index 2df082c..774980b 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/networkdiscovery/service/SpringServiceImpl.java +++ b/src/main/java/org/onap/pomba/contextbuilder/networkdiscovery/service/SpringServiceImpl.java @@ -24,8 +24,11 @@ import com.google.gson.Gson; import java.net.InetAddress; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; @@ -38,7 +41,6 @@ import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.Status.Family; import org.onap.aai.restclient.client.Headers; -import org.onap.pomba.common.datatypes.Attribute; import org.onap.pomba.common.datatypes.DataQuality; import org.onap.pomba.common.datatypes.ModelContext; import org.onap.pomba.common.datatypes.Network; @@ -50,6 +52,7 @@ import org.onap.pomba.contextbuilder.networkdiscovery.model.NdResource; import org.onap.pomba.contextbuilder.networkdiscovery.model.NdResources; import org.onap.pomba.contextbuilder.networkdiscovery.service.rs.RestService; import org.onap.pomba.contextbuilder.networkdiscovery.util.RestUtil; +import org.onap.pomba.contextbuilder.networkdiscovery.util.TransformationUtil; import org.onap.sdnc.apps.pomba.networkdiscovery.datamodel.NetworkDiscoveryNotification; import org.onap.sdnc.apps.pomba.networkdiscovery.datamodel.Resource; import org.slf4j.Logger; @@ -59,7 +62,10 @@ import org.springframework.beans.factory.annotation.Autowired; @org.springframework.stereotype.Service public class SpringServiceImpl implements SpringService { + private static final String ND_TYPE_VSERVER = "vserver"; + private static final String ND_TYPE_L3_NETWORK = "l3-network"; private static Logger log = LoggerFactory.getLogger(RestService.class); + public static final String APP_NAME = "NetworkDiscoveryContextBuilder"; public static final String MDC_REQUEST_ID = "RequestId"; @@ -193,134 +199,59 @@ public class SpringServiceImpl implements SpringService { return reply; } - private void updateNetworkDiscoveryCtx(ModelContext networkDiscoveryCtx, Resource resource) { - // Future: try to replace this with a Jolt transformation. - for (VNF vnf : networkDiscoveryCtx.getVnfs()) { - for (VFModule vfModule : vnf.getVfModules()) { - for (VM vm : vfModule.getVms()) { - if (vm.getUuid().equals(resource.getId()) && "vserver".equals(resource.getType())) { - vm.setDataQuality(resource.getDataQuality()); - if (null != resource.getAttributeList()) { - for (org.onap.sdnc.apps.pomba.networkdiscovery.datamodel.Attribute ndattribute : resource - .getAttributeList()) { - try { - String ndattributeName = ndattribute.getName(); - // Some Network Discovery attribute name do not exactly - // match the pomba-audit-common model Attribute Enums, - // so we have to do some custom mapping here: - switch (ndattributeName) { - case "id": - vm.setUuid(ndattribute.getValue()); - break; - case "name": - vm.setName(ndattribute.getValue()); - break; - case "inMaintenance": - Attribute attribute = new Attribute(); - attribute.setName(Attribute.Name.lockedBoolean); - attribute.setValue(ndattribute.getValue()); - attribute.setDataQuality(ndattribute.getDataQuality()); - vm.addAttribute(attribute); - break; - case "hostname": - attribute = new Attribute(); - attribute.setName(Attribute.Name.hostName); - attribute.setValue(ndattribute.getValue()); - attribute.setDataQuality(ndattribute.getDataQuality()); - vm.addAttribute(attribute); - break; - default: - attribute = new Attribute(); - attribute.setName(Attribute.Name.valueOf(ndattributeName)); - attribute.setValue(ndattribute.getValue()); - attribute.setDataQuality(ndattribute.getDataQuality()); - vm.addAttribute(attribute); - } - } catch (IllegalArgumentException ex) { - // The attribute Name passed back from Network Discovery is not in our enum - log.info("Attribute Name: {} for Resource: {} Id: {} is invalid", - ndattribute.getName(), resource.getName(), resource.getId()); - } - } - } - } - } - for (Network network : vfModule.getNetworks()) { - if (network.getUuid().equals(resource.getId()) && "l3-network".equals(resource.getType())) { - network.setDataQuality(resource.getDataQuality()); - if (null != resource.getAttributeList()) { - for (org.onap.sdnc.apps.pomba.networkdiscovery.datamodel.Attribute ndattribute : resource - .getAttributeList()) { - try { - String ndattributeName = ndattribute.getName(); - // Some Network Discovery attribute name do not exactly - // match the pomba-audit-common model Attribute Enums, - // so we have to do some custom mapping here: - switch (ndattributeName) { - case "id": - network.setUuid(ndattribute.getValue()); - break; - case "name": - network.setName(ndattribute.getValue()); - break; - case "AdminState": - Attribute attribute = new Attribute(); - attribute.setName(Attribute.Name.adminStatus); - attribute.setValue(ndattribute.getValue()); - attribute.setDataQuality(ndattribute.getDataQuality()); - network.addAttribute(attribute); - break; - case "sharedNetwork": - attribute = new Attribute(); - attribute.setName(Attribute.Name.sharedNetworkBoolean); - attribute.setValue(ndattribute.getValue()); - attribute.setDataQuality(ndattribute.getDataQuality()); - network.addAttribute(attribute); - break; - default: - attribute = new Attribute(); - attribute.setName(Attribute.Name.valueOf(ndattributeName)); - attribute.setValue(ndattribute.getValue()); - attribute.setDataQuality(ndattribute.getDataQuality()); - network.addAttribute(attribute); - } - } catch (IllegalArgumentException ex) { - // The attribute Name passed back from Network Discovery is not in our enum - log.info("Attribute Name: {} for Resource: {} Id: {} is invalid", - ndattribute.getName(), resource.getName(), resource.getId()); - } - } - } - } - } + private void updateNetworkDiscoveryCtx(ModelContext networkDiscoveryCtx, Map resourceMap) { - } + for (Network network : networkDiscoveryCtx.getNetworkList()) { + updateNetworkInstance(resourceMap, network); } - } - private void updateNetworkDiscoveryCtxDataQuality(ModelContext networkDiscoveryCtx, String resourceId, - DataQuality dataQuality) { for (VNF vnf : networkDiscoveryCtx.getVnfs()) { + for (Network network : vnf.getNetworks()) { + updateNetworkInstance(resourceMap, network); + } + for (VFModule vfModule : vnf.getVfModules()) { for (VM vm : vfModule.getVms()) { - if (vm.getUuid().equals(resourceId)) { - vm.setDataQuality(dataQuality); - } + updateVmInstance(resourceMap, vm); } + for (Network network : vfModule.getNetworks()) { - if (network.getUuid().equals(resourceId)) { - network.setDataQuality(dataQuality); - } + updateNetworkInstance(resourceMap, network); } - } } } + private void updateVmInstance(Map resourceMap, VM vm) { + String resources = resourceMap.get(vm.getUuid()); + String resultJson = TransformationUtil.transform(resources, ND_TYPE_VSERVER); + + // copy the result into the VM class: + Gson gson = new Gson(); + VM ndVm = gson.fromJson(resultJson, VM.class); + vm.setName(ndVm.getName()); + vm.setDataQuality(ndVm.getDataQuality()); + vm.setAttributes(ndVm.getAttributes()); + } + + private void updateNetworkInstance(Map resourceMap, Network network) { + String resources = resourceMap.get(network.getUuid()); + String resultJson = TransformationUtil.transform(resources, ND_TYPE_L3_NETWORK); + + // copy the results into the Network class: + Gson gson = new Gson(); + Network ndNetwork = gson.fromJson(resultJson, Network.class); + network.setName(ndNetwork.getName()); + network.setDataQuality(ndNetwork.getDataQuality()); + network.setAttributes(ndNetwork.getAttributes()); + } + /* Return list of requestIds sent to network-discovery microService. */ private void sendNetworkDiscoveryRequest(ModelContext networkDiscoveryCtx, NdResources ndResources, String parentRequestId, String partnerName) throws DiscoveryException { - + + Map resourceMap = new HashMap<>(); + for (NdResource ndResource : ndResources.getNdResources()) { try { // The old_requestId is inherited from ServiceDecomposition. @@ -329,23 +260,33 @@ public class SpringServiceImpl implements SpringService { String requestId = parentRequestId + NETWORK_DISCOVERY_RSP_REQUESTID_SPLITTER + uniqueSeq.incrementAndGet(); - NetworkDiscoveryNotification nt = sendNetworkDiscoveryRequestToSpecificServer(partnerName, + String resultJson = sendNetworkDiscoveryRequestToSpecificServer(partnerName, parentRequestId, requestId, ndResource.getResourceId(), ndResource.getResourceType()); - List resourceList = nt.getResources(); - for (Resource resource1 : resourceList) { - updateNetworkDiscoveryCtx(networkDiscoveryCtx, resource1); - } + resourceMap.put(ndResource.getResourceId(), resultJson); } catch (Exception e) { - log.error("Error from Network Disovery Request - resourceId: {}, message: {}", + log.error("Error from Network Discovery Request - resourceId: {}, message: {}", ndResource.getResourceId(), e.getMessage()); - DataQuality dataQuality = DataQuality.error("Error from Network Disovery Request: " + e.getMessage()); - updateNetworkDiscoveryCtxDataQuality(networkDiscoveryCtx, ndResource.getResourceId(), dataQuality); + + // Build a fake Network Discovery error result, so it will be returned to the client: + Resource errorResource = new Resource(); + errorResource.setId(ndResource.getResourceId()); + DataQuality dataQuality = DataQuality.error(e.getMessage()); + errorResource.setDataQuality(dataQuality); + List resourceList = new ArrayList<>(); + resourceList.add(errorResource); + NetworkDiscoveryNotification ndErrorResult = new NetworkDiscoveryNotification(); + ndErrorResult.setResources(resourceList); + ndErrorResult.setCode(404); + Gson gson = new Gson(); + String ndErrorResultToJson = gson.toJson(ndErrorResult); + resourceMap.put(ndResource.getResourceId(), ndErrorResultToJson); } } + updateNetworkDiscoveryCtx(networkDiscoveryCtx, resourceMap); } - private NetworkDiscoveryNotification sendNetworkDiscoveryRequestToSpecificServer(String partnerName, + private String sendNetworkDiscoveryRequestToSpecificServer(String partnerName, String parentRequestId, String requestId, String resourceId, String resourceType) throws DiscoveryException { @@ -378,9 +319,9 @@ public class SpringServiceImpl implements SpringService { Response.Status.fromStatusCode(response.getStatus())); } - NetworkDiscoveryNotification ndResponse = response.readEntity(NetworkDiscoveryNotification.class); - log.info("Message sent. Response Payload: {}", ndResponse); - return ndResponse; + String ndResult = response.readEntity(String.class); + log.info("Message sent. Response ndResult: {}", ndResult); + return ndResult; } diff --git a/src/main/java/org/onap/pomba/contextbuilder/networkdiscovery/service/rs/RestServiceImpl.java b/src/main/java/org/onap/pomba/contextbuilder/networkdiscovery/service/rs/RestServiceImpl.java index 67899ac..3a1b974 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/networkdiscovery/service/rs/RestServiceImpl.java +++ b/src/main/java/org/onap/pomba/contextbuilder/networkdiscovery/service/rs/RestServiceImpl.java @@ -18,6 +18,8 @@ package org.onap.pomba.contextbuilder.networkdiscovery.service.rs; +import com.google.gson.ExclusionStrategy; +import com.google.gson.FieldAttributes; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -28,6 +30,7 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.onap.pomba.common.datatypes.ModelContext; +import org.onap.pomba.common.datatypes.VFModule; import org.onap.pomba.contextbuilder.networkdiscovery.exception.DiscoveryException; import org.onap.pomba.contextbuilder.networkdiscovery.exception.ErrorMessage; import org.onap.pomba.contextbuilder.networkdiscovery.service.SpringService; @@ -46,6 +49,27 @@ public class RestServiceImpl implements RestService { @Autowired private SpringService service; + /** + * Certain attributes in the common model do not apply (are not available) from network discovery. + * This exclusion strategy will make sure that any defaulted attributes that are not available/not valid are + * excluded from the json response. + * + * For now, there a two known attributes that need to be excluded from the VFModule: + * - minInstances (because it's an integer that defaults to zero) + * - maxInstances (because it's an integer that defaults to zero) + */ + public class ContextBuilderExclusionStrategy implements ExclusionStrategy { + + public boolean shouldSkipClass(Class arg0) { + return false; + } + + public boolean shouldSkipField(FieldAttributes f) { + return (f.getDeclaringClass() == VFModule.class && f.getName().equals("minInstances")) + || (f.getDeclaringClass() == VFModule.class && f.getName().equals("maxInstances")); + } + } + @Override public Response getContext(HttpServletRequest req, String authorization, String partnerName, String requestId, String fromAppId, String transactionId, String serviceInstanceId, String modelVersionId, @@ -79,7 +103,9 @@ public class RestServiceImpl implements RestService { // Return empty JSON return Response.ok().entity(EMPTY_JSON_OBJECT).build(); } else { - Gson gson = new GsonBuilder().create(); + GsonBuilder gsonBuilder = new GsonBuilder(); + gsonBuilder.setExclusionStrategies(new ContextBuilderExclusionStrategy()); + Gson gson = gsonBuilder.create(); return Response.ok().entity(gson.toJson(sdContext)).build(); } } catch (DiscoveryException x) { @@ -89,7 +115,7 @@ public class RestServiceImpl implements RestService { } catch (Exception x) { log.error(ErrorMessage.CONTEXT_BUILDER_FAILED, x); return Response.status(Status.INTERNAL_SERVER_ERROR).entity(x.getMessage()).build(); - + } finally { MDC.clear(); } diff --git a/src/main/java/org/onap/pomba/contextbuilder/networkdiscovery/util/TransformationUtil.java b/src/main/java/org/onap/pomba/contextbuilder/networkdiscovery/util/TransformationUtil.java new file mode 100644 index 0000000..7e7af3e --- /dev/null +++ b/src/main/java/org/onap/pomba/contextbuilder/networkdiscovery/util/TransformationUtil.java @@ -0,0 +1,50 @@ +/* + * Copyright 2014 Bazaarvoice, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.pomba.contextbuilder.networkdiscovery.util; + +import com.bazaarvoice.jolt.Chainr; +import com.bazaarvoice.jolt.JsonUtils; + +import java.io.File; +import java.util.List; + +public class TransformationUtil { + + private static final String CONFIG_JOLT = "config/jolt"; + + private TransformationUtil() { + throw new IllegalStateException("Utility class"); + } + + /** + * Transforms the sourceJson using the jolt specification for the given resourceType. + * + * @param sourceJson + * @param resourceType + * @return + */ + public static String transform(String sourceJson, String resourceType) { + + Object sourceObject = JsonUtils.jsonToObject(sourceJson); + + List chainrSpecJSON = JsonUtils.filepathToList(CONFIG_JOLT + File.separator + resourceType + "Spec.json"); + Chainr chainr = Chainr.fromSpec(chainrSpecJSON); + Object output = chainr.transform(sourceObject); + + return JsonUtils.toJsonString(output); + } + +} \ No newline at end of file diff --git a/src/test/java/org/onap/pomba/contextbuilder/networkdiscovery/test/jolt/TransformationTest.java b/src/test/java/org/onap/pomba/contextbuilder/networkdiscovery/test/jolt/TransformationTest.java index 29a4a6f..29173fb 100644 --- a/src/test/java/org/onap/pomba/contextbuilder/networkdiscovery/test/jolt/TransformationTest.java +++ b/src/test/java/org/onap/pomba/contextbuilder/networkdiscovery/test/jolt/TransformationTest.java @@ -29,7 +29,10 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.onap.pomba.common.datatypes.ModelContext; +import org.onap.pomba.common.datatypes.Network; +import org.onap.pomba.common.datatypes.VM; import org.onap.pomba.contextbuilder.networkdiscovery.model.NdResources; +import org.onap.pomba.contextbuilder.networkdiscovery.util.TransformationUtil; public class TransformationTest { @@ -39,29 +42,24 @@ public class TransformationTest { @Rule public ExpectedException expectedEx = ExpectedException.none(); - @Test public void testTransformNdResources() { Object sourceObject = JsonUtils.filepathToObject(TEST_RESOURCES + "/serviceDecompResponse.json"); Object sourceObject1 = JsonUtils.jsonToObject(JsonUtils.toJsonString(sourceObject)); - + List chainrSpecJson = JsonUtils.filepathToList(CONFIG_JOLT_DIRECTORY + "sdToNdResourcesSpec.json"); Chainr chainr = Chainr.fromSpec(chainrSpecJson); Object output = chainr.transform(sourceObject1); String resultJson = JsonUtils.toJsonString(output); - - System.err.println(resultJson); - + // read the result into the NqQuery class: Gson gson = new Gson(); NdResources ndQuery = gson.fromJson(resultJson, NdResources.class); - + // convert ndQuery back to json: String ndQueryToJson = gson.toJson(ndQuery); - - // Compare with expected output: Object expectedObject = JsonUtils.filepathToObject(TEST_RESOURCES + "serviceDecompToNdResources-expected.json"); @@ -69,7 +67,34 @@ public class TransformationTest { Assert.assertEquals("Json transformation result does not match expected content", JsonUtils.toPrettyJsonString(expectedObject), JsonUtils.toPrettyJsonString(JsonUtils.jsonToObject(ndQueryToJson))); + } + + @Test + public void testTransformNdResourcesL3Network() { + + Object sourceObject = JsonUtils.filepathToObject(TEST_RESOURCES + "/serviceDecompResponse2.json"); + Object sourceObject1 = JsonUtils.jsonToObject(JsonUtils.toJsonString(sourceObject)); + + List chainrSpecJson = JsonUtils.filepathToList(CONFIG_JOLT_DIRECTORY + "sdToNdResourcesSpec.json"); + Chainr chainr = Chainr.fromSpec(chainrSpecJson); + Object output = chainr.transform(sourceObject1); + + String resultJson = JsonUtils.toJsonString(output); + + // read the result into the NqQuery class: + Gson gson = new Gson(); + NdResources ndQuery = gson.fromJson(resultJson, NdResources.class); + + // convert ndQuery back to json: + String ndQueryToJson = gson.toJson(ndQuery); + // Compare with expected output: + Object expectedObject = JsonUtils + .filepathToObject(TEST_RESOURCES + "serviceDecompToNdResources2-expected.json"); + + Assert.assertEquals("Json transformation result does not match expected content", + JsonUtils.toPrettyJsonString(expectedObject), + JsonUtils.toPrettyJsonString(JsonUtils.jsonToObject(ndQueryToJson))); } @Test @@ -77,27 +102,103 @@ public class TransformationTest { Object sourceObject = JsonUtils.filepathToObject(TEST_RESOURCES + "serviceDecompResponse.json"); Object sourceObject1 = JsonUtils.jsonToObject(JsonUtils.toJsonString(sourceObject)); - + List chainrSpecJson = JsonUtils.filepathToList(CONFIG_JOLT_DIRECTORY + "sdToModelContextSpec.json"); Chainr chainr = Chainr.fromSpec(chainrSpecJson); Object output = chainr.transform(sourceObject1); String resultJson = JsonUtils.toJsonString(output); - + // read the result into the NqQuery class: Gson gson = new Gson(); ModelContext ndQuery = gson.fromJson(resultJson, ModelContext.class); + + // convert ndQuery back to json: + String ndQueryToJson = gson.toJson(ndQuery); + + // Compare with expected output: + Object expectedObject = JsonUtils + .filepathToObject(TEST_RESOURCES + "serviceDecompToModelContext-expected.json"); + + Assert.assertEquals("Json transformation result does not match expected content", + JsonUtils.toPrettyJsonString(expectedObject), + JsonUtils.toPrettyJsonString(JsonUtils.jsonToObject(ndQueryToJson))); + } + + @Test + public void testTransformModelContextL3Network() { + + Object sourceObject = JsonUtils.filepathToObject(TEST_RESOURCES + "serviceDecompResponse2.json"); + Object sourceObject1 = JsonUtils.jsonToObject(JsonUtils.toJsonString(sourceObject)); + + List chainrSpecJson = JsonUtils.filepathToList(CONFIG_JOLT_DIRECTORY + "sdToModelContextSpec.json"); + Chainr chainr = Chainr.fromSpec(chainrSpecJson); + Object output = chainr.transform(sourceObject1); + + String resultJson = JsonUtils.toJsonString(output); + System.err.println(resultJson); + + // read the result into the NqQuery class: + Gson gson = new Gson(); + ModelContext ndQuery = gson.fromJson(resultJson, ModelContext.class); + // convert ndQuery back to json: String ndQueryToJson = gson.toJson(ndQuery); // Compare with expected output: - Object expectedObject = JsonUtils.filepathToObject(TEST_RESOURCES + "serviceDecompToModelContext-expected.json"); + Object expectedObject = JsonUtils + .filepathToObject(TEST_RESOURCES + "serviceDecompToModelContext2-expected.json"); + + Assert.assertEquals("Json transformation result does not match expected content", + JsonUtils.toPrettyJsonString(expectedObject), + JsonUtils.toPrettyJsonString(JsonUtils.jsonToObject(ndQueryToJson))); + } + + @Test + public void testTransformVserverToVm() { + + Object sourceObject = JsonUtils.filepathToObject(TEST_RESOURCES + "networkDiscoveryVserverResponse.json"); + + String resultJson = TransformationUtil.transform(JsonUtils.toJsonString(sourceObject), "vserver"); + + // read the result into the VM class: + Gson gson = new Gson(); + VM ndVm = gson.fromJson(resultJson, VM.class); + + // convert VM object back to json: + String ndQueryToJson = gson.toJson(ndVm); + + // Compare with expected output: + Object expectedObject = JsonUtils + .filepathToObject(TEST_RESOURCES + "networkDiscoveryVserverToVm-expected.json"); Assert.assertEquals("Json transformation result does not match expected content", JsonUtils.toPrettyJsonString(expectedObject), JsonUtils.toPrettyJsonString(JsonUtils.jsonToObject(ndQueryToJson))); + } + + @Test + public void testTransformL3NetworkToNetworkModel() { + + Object sourceObject = JsonUtils.filepathToObject(TEST_RESOURCES + "networkDiscoveryL3NetworkResponse.json"); + + String resultJson = TransformationUtil.transform(JsonUtils.toJsonString(sourceObject), "l3-network"); + + // read the result into the VM class: + Gson gson = new Gson(); + Network ndNetwork = gson.fromJson(resultJson, Network.class); + + // convert VM object back to json: + String ndQueryToJson = gson.toJson(ndNetwork); + // Compare with expected output: + Object expectedObject = JsonUtils + .filepathToObject(TEST_RESOURCES + "networkDiscoveryL3NetworkToNetwork-expected.json"); + + Assert.assertEquals("Json transformation result does not match expected content", + JsonUtils.toPrettyJsonString(expectedObject), + JsonUtils.toPrettyJsonString(JsonUtils.jsonToObject(ndQueryToJson))); } } diff --git a/src/test/resources/jolt/networkDiscoveryL3NetworkResponse.json b/src/test/resources/jolt/networkDiscoveryL3NetworkResponse.json new file mode 100644 index 0000000..3ecf22a --- /dev/null +++ b/src/test/resources/jolt/networkDiscoveryL3NetworkResponse.json @@ -0,0 +1,59 @@ +{ + "requestId": "88001", + "code": 200, + "message": "OK", + "ackFinalIndicator": true, + "resources": [ + { + "id": "01e8d84a-17a6-47b5-a167-6a45d1d56603", + "name": "NET_1106", + "type": "l3-network", + "dataQuality": { + "status": "ok", + "errorText": null + }, + "attributeList": [ + { + "name": "adminState", + "value": "true", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "sharedNetwork", + "value": "true", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "status", + "value": "ACTIVE", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "subnets", + "value": "089c9160-6f7a-4ae0-83b7-33536b4c6672", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "tenantId", + "value": "cbd5e07f58d84ea6b795aa9f5f207df0", + "dataQuality": { + "status": "ok", + "errorText": null + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/test/resources/jolt/networkDiscoveryL3NetworkToNetwork-expected.json b/src/test/resources/jolt/networkDiscoveryL3NetworkToNetwork-expected.json new file mode 100644 index 0000000..def92bd --- /dev/null +++ b/src/test/resources/jolt/networkDiscoveryL3NetworkToNetwork-expected.json @@ -0,0 +1,15 @@ +{ + "uuid" : "01e8d84a-17a6-47b5-a167-6a45d1d56603", + "name" : "NET_1106", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ { + "name" : "sharedNetworkBoolean", + "value" : "true", + "dataQuality" : { + "status" : "ok" + } + } ], + "networkPolicyList" : [ ] +} \ No newline at end of file diff --git a/src/test/resources/jolt/networkDiscoveryVserverResponse.json b/src/test/resources/jolt/networkDiscoveryVserverResponse.json new file mode 100644 index 0000000..e555d4c --- /dev/null +++ b/src/test/resources/jolt/networkDiscoveryVserverResponse.json @@ -0,0 +1,99 @@ +{ + "requestId": "5d115268-564b-4db6-9d59-aa28cbd2d022___4", + "code": 200, + "message": "OK", + "ackFinalIndicator": true, + "resources": [ + { + "id": "a6a609e3-967a-48bd-8ce5-41c7ff5c19b9", + "name": "norm-rancher", + "type": "vserver", + "dataQuality": { + "status": "ok", + "errorText": null + }, + "attributeList": [ + { + "name": "inMaintenance", + "value": "false", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "hostname", + "value": "norm-rancher", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "imageId", + "value": "87e000f6-9a81-4841-b446-5d6751c42c48", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "status", + "value": "ACTIVE", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "vmState", + "value": "active", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "userId", + "value": "0aae369d1c874bb7827f61ca4f11edae", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "tenantId", + "value": "1130b349e19c4827bf91a29d51256af1", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "hostId", + "value": "a4b1deed35881a129eabaaf9abef99b83706567bf026d8d7120a8ff3", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "host", + "value": "Setup-D2-OTT-A-C1", + "dataQuality": { + "status": "ok", + "errorText": null + } + }, + { + "name": "hostStatus", + "value": "UP", + "dataQuality": { + "status": "ok", + "errorText": null + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/test/resources/jolt/networkDiscoveryVserverToVm-expected.json b/src/test/resources/jolt/networkDiscoveryVserverToVm-expected.json new file mode 100644 index 0000000..41ebe3f --- /dev/null +++ b/src/test/resources/jolt/networkDiscoveryVserverToVm-expected.json @@ -0,0 +1,38 @@ +{ + "uuid": "a6a609e3-967a-48bd-8ce5-41c7ff5c19b9", + "name": "norm-rancher", + "dataQuality": { + "status": "ok" + }, + "attributeList": [ + { + "name": "lockedBoolean", + "value": "false", + "dataQuality": { + "status": "ok" + } + }, + { + "name": "hostName", + "value": "norm-rancher", + "dataQuality": { + "status": "ok" + } + }, + { + "name": "imageId", + "value": "87e000f6-9a81-4841-b446-5d6751c42c48", + "dataQuality": { + "status": "ok" + } + } + ], + "pServer": { + "dataQuality": { + "status": "ok" + }, + "attributeList": [], + "pInterfaceList": [] + }, + "lInterfaceList": [] +} \ No newline at end of file diff --git a/src/test/resources/jolt/serviceDecompResponse2.json b/src/test/resources/jolt/serviceDecompResponse2.json new file mode 100644 index 0000000..2d43499 --- /dev/null +++ b/src/test/resources/jolt/serviceDecompResponse2.json @@ -0,0 +1,263 @@ +{ + "service-instance-id": "PombaDemoCust_002-ServiceInst-002", + "service-instance-name": "PombaDemoCust_002-ServiceInst-002-name", + "model-invariant-id": "pomba-demo-sdc-model-002", + "model-version-id": "pomba-demo-sdc-model-002-version002", + "resource-version": "1548702838544", + "generic-vnfs": [ + { + "nf-role": "nf-role1", + "service-id": "8ea56b0d-459d-4668-b363-c9567432d8b7", + "vnf-id": "PombaDemoCust_002-VNF-id-002", + "nf-type": "nf-type1", + "l3-networks": [ + { + "network-role": "", + "network-technology": "", + "network-id": "network-id-vnf1-001", + "is-external-network": false, + "is-bound-to-vpn": false, + "is-provider-network": false, + "network-type": "", + "model-version-id": "pomba-demo-sdc-model-001-version001", + "resource-version": "1547484061985", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "network-name": "NET_1105", + "is-shared-network": true, + "model-invariant-id": "pomba-demo-sdc-model-001" + }, + { + "network-role": "", + "network-technology": "", + "network-id": "network-id-vnf1-002", + "is-external-network": false, + "is-bound-to-vpn": false, + "is-provider-network": false, + "network-type": "", + "model-version-id": "pomba-demo-sdc-model-001-version001", + "resource-version": "1547484429696", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "network-name": "NET_1106", + "is-shared-network": true, + "model-invariant-id": "pomba-demo-sdc-model-001" + } + ], + "prov-status": "PREPROV", + "vnf-type": "vFW-vSINK-service/vFWvSINK 0", + "orchestration-status": "Created", + "nf-naming-code": "nf-naming-code1", + "in-maint": false, + "nf-function": "nf-function1", + "model-version-id": "pomba-demo-sdc-model-002-version002", + "vservers": [ + { + "in-maint": false, + "resource-version": "1548702799178", + "vserver-name": "Firewall-002", + "prov-status": "ACTIVE", + "vserver-id": "a6a609e3-967a-48bd-8ce5-41c7ff5c19b9", + "vserver-name2": "Firewall-002", + "vserver-selflink": "http://10.12.25.2:8774/v2.1/a6a609e3-967a-48bd-8ce5-41c7ff5c19b9/servers/a6a609e3-967a-48bd-8ce5-41c7ff5c19b9", + "is-closed-loop-disabled": false + } + ], + "resource-version": "1548702975892", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "model-invariant-id": "pomba-demo-sdc-model-002", + "vnf-name": "Firewall-1", + "is-closed-loop-disabled": false, + "vf-modules": { + "vf-module": [ + { + "vf-module-name": "PombaDemoCust_002-VNF-id-002-VfModule002-name", + "l3-networks": [ + { + "network-role": "", + "network-technology": "", + "network-id": "network-id-vnf1-vfmodule1-001", + "is-external-network": false, + "is-bound-to-vpn": false, + "is-provider-network": false, + "network-type": "", + "model-version-id": "pomba-demo-sdc-model-001-version001", + "resource-version": "1547484061985", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "network-name": "NET_1105", + "is-shared-network": true, + "model-invariant-id": "pomba-demo-sdc-model-001" + }, + { + "network-role": "", + "network-technology": "", + "network-id": "network-id-vnf1-vfmodule1-002", + "is-external-network": false, + "is-bound-to-vpn": false, + "is-provider-network": false, + "network-type": "", + "model-version-id": "pomba-demo-sdc-model-001-version001", + "resource-version": "1547484429696", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "network-name": "NET_1106", + "is-shared-network": true, + "model-invariant-id": "pomba-demo-sdc-model-001" + } + ], + "module-index": 0, + "orchestration-status": "Active", + "automated-assignment": true, + "model-version-id": "pomba-demo-sdc-model-002-version002", + "heat-stack-id": "HeatStackId-002", + "resource-version": "1548707876095", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "is-base-vf-module": true, + "vf-module-id": "PombaDemoCust_002-VNF-id-002-VfModule002", + "model-invariant-id": "pomba-demo-sdc-model-002" + } + ] + } + }, + { + "nf-role": "", + "service-id": "8ea56b0d-459d-4668-b363-c9567432d8b7", + "vnf-id": "PombaDemoCust_002-VNF-id-002-2", + "nf-type": "", + "l3-networks": [ + { + "network-role": "", + "network-technology": "", + "network-id": "network-id-vnf2-001", + "is-external-network": false, + "is-bound-to-vpn": false, + "is-provider-network": false, + "network-type": "", + "model-version-id": "pomba-demo-sdc-model-001-version001", + "resource-version": "1547484061985", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "network-name": "NET_1105", + "is-shared-network": true, + "model-invariant-id": "pomba-demo-sdc-model-001" + }, + { + "network-role": "", + "network-technology": "", + "network-id": "network-id-vnf2-002", + "is-external-network": false, + "is-bound-to-vpn": false, + "is-provider-network": false, + "network-type": "", + "model-version-id": "pomba-demo-sdc-model-001-version001", + "resource-version": "1547484429696", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "network-name": "NET_1106", + "is-shared-network": true, + "model-invariant-id": "pomba-demo-sdc-model-001" + } + ], + "prov-status": "PREPROV", + "vnf-type": "vFW-vSINK-service/vFWvSINK 0", + "orchestration-status": "Created", + "nf-naming-code": "", + "in-maint": false, + "nf-function": "", + "model-version-id": "pomba-demo-sdc-model-002-version002", + "vservers": [ + { + "in-maint": true, + "resource-version": "1548702805873", + "vserver-name": "Firewall-002-2", + "prov-status": "UNKNOWN", + "vserver-id": "a6a609e3-967a-48bd-8ce5-41c7ff5c19b9-2", + "vserver-name2": "Firewall-002-2", + "vserver-selflink": "http://10.12.25.2:8774/v2.1/a6a609e3-967a-48bd-8ce5-41c7ff5c19b9/servers/a6a609e3-967a-48bd-8ce5-41c7ff5c19b9-2", + "is-closed-loop-disabled": false + } + ], + "resource-version": "1548708278469", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "vf-modules": { + "vf-module": [ + { + "vf-module-name": "PombaDemoCust_002-VNF-id-002-VfModule002-name", + "model-version-id": "pomba-demo-sdc-model-002-version002", + "heat-stack-id": "HeatStackId-002", + "resource-version": "1548708278830", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "is-base-vf-module": true, + "vf-module-id": "PombaDemoCust_002-VNF-id-002-VfModule002", + "module-index": 0, + "model-invariant-id": "pomba-demo-sdc-model-002", + "orchestration-status": "Active", + "automated-assignment": true, + "l3-networks": [ + { + "network-role": "", + "network-technology": "", + "network-id": "network-id-vnf2-vfmodule1-001", + "is-external-network": false, + "is-bound-to-vpn": false, + "is-provider-network": false, + "network-type": "", + "model-version-id": "pomba-demo-sdc-model-001-version001", + "resource-version": "1547484061985", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "network-name": "NET_1105", + "is-shared-network": true, + "model-invariant-id": "pomba-demo-sdc-model-001" + }, + { + "network-role": "", + "network-technology": "", + "network-id": "network-id-vnf2-vfmodule1-002", + "is-external-network": false, + "is-bound-to-vpn": false, + "is-provider-network": false, + "network-type": "", + "model-version-id": "pomba-demo-sdc-model-001-version001", + "resource-version": "1547484429696", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "network-name": "NET_1106", + "is-shared-network": true, + "model-invariant-id": "pomba-demo-sdc-model-001" + } + ] + } + ] + }, + "model-invariant-id": "pomba-demo-sdc-model-002", + "vnf-name": "Firewall-2", + "is-closed-loop-disabled": false + } + ], + "l3-networks": [ + { + "network-role": "", + "network-technology": "", + "network-id": "network-id-service-001", + "is-external-network": false, + "is-bound-to-vpn": false, + "is-provider-network": false, + "network-type": "", + "model-version-id": "pomba-demo-sdc-model-001-version001", + "resource-version": "1547484061985", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "network-name": "NET_1105", + "is-shared-network": true, + "model-invariant-id": "pomba-demo-sdc-model-001" + }, + { + "network-role": "", + "network-technology": "", + "network-id": "network-id-service-002", + "is-external-network": false, + "is-bound-to-vpn": false, + "is-provider-network": false, + "network-type": "", + "model-version-id": "pomba-demo-sdc-model-001-version001", + "resource-version": "1547484429696", + "model-customization-id": "3b822416-475d-4e1c-aac3-2544b0a0fdfc", + "network-name": "NET_1106", + "is-shared-network": true, + "model-invariant-id": "pomba-demo-sdc-model-001" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/jolt/serviceDecompToModelContext-expected.json b/src/test/resources/jolt/serviceDecompToModelContext-expected.json index 31f1318..ea15bf4 100644 --- a/src/test/resources/jolt/serviceDecompToModelContext-expected.json +++ b/src/test/resources/jolt/serviceDecompToModelContext-expected.json @@ -33,29 +33,28 @@ "status" : "ok" }, "attributeList" : [ ], - "pInterfaceList" : [ ], - "logicalLinkList" : [ ] + "pInterfaceList" : [ ] }, "lInterfaceList" : [ ] } ], - "networkList" : [ { - "uuid" : "2ea02809-7279-4b5e-931a-62b231615497", - "dataQuality" : { - "status" : "ok" - }, - "attributeList" : [ ], - "networkPolicyList" : [ ] - }, { - "uuid" : "01e8d84a-17a6-47b5-a167-6a45d1d56603", - "dataQuality" : { - "status" : "ok" - }, - "attributeList" : [ ], - "networkPolicyList" : [ ] - } ] + "networkList" : [ ] } ], "vnfcList" : [ ], - "networkList" : [ ] + "networkList" : [ { + "uuid" : "2ea02809-7279-4b5e-931a-62b231615497", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + }, { + "uuid" : "01e8d84a-17a6-47b5-a167-6a45d1d56603", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + } ] }, { "dataQuality" : { "status" : "ok" @@ -79,29 +78,28 @@ "status" : "ok" }, "attributeList" : [ ], - "pInterfaceList" : [ ], - "logicalLinkList" : [ ] + "pInterfaceList" : [ ] }, "lInterfaceList" : [ ] } ], - "networkList" : [ { - "uuid" : "2ea02809-7279-4b5e-931a-62b231615497-1", - "dataQuality" : { - "status" : "ok" - }, - "attributeList" : [ ], - "networkPolicyList" : [ ] - }, { - "uuid" : "01e8d84a-17a6-47b5-a167-6a45d1d56603-1", - "dataQuality" : { - "status" : "ok" - }, - "attributeList" : [ ], - "networkPolicyList" : [ ] - } ] + "networkList" : [ ] } ], "vnfcList" : [ ], - "networkList" : [ ] + "networkList" : [ { + "uuid" : "2ea02809-7279-4b5e-931a-62b231615497-1", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + }, { + "uuid" : "01e8d84a-17a6-47b5-a167-6a45d1d56603-1", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + } ] } ], "pnfList" : [ ], "networkList" : [ ] diff --git a/src/test/resources/jolt/serviceDecompToModelContext2-expected.json b/src/test/resources/jolt/serviceDecompToModelContext2-expected.json new file mode 100644 index 0000000..bf8589d --- /dev/null +++ b/src/test/resources/jolt/serviceDecompToModelContext2-expected.json @@ -0,0 +1,149 @@ +{ + "service" : { + "uuid" : "PombaDemoCust_002-ServiceInst-002", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ] + }, + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "vnfList" : [ { + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "vfModuleList" : [ { + "maxInstances" : 0, + "minInstances" : 0, + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "vmList" : [ { + "uuid" : "a6a609e3-967a-48bd-8ce5-41c7ff5c19b9", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "pServer" : { + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "pInterfaceList" : [ ] + }, + "lInterfaceList" : [ ] + } ], + "networkList" : [ { + "uuid" : "network-id-vnf1-vfmodule1-001", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + }, { + "uuid" : "network-id-vnf1-vfmodule1-002", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + } ] + } ], + "vnfcList" : [ ], + "networkList" : [ { + "uuid" : "network-id-vnf1-001", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + }, { + "uuid" : "network-id-vnf1-002", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + } ] + }, { + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "vfModuleList" : [ { + "maxInstances" : 0, + "minInstances" : 0, + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "vmList" : [ { + "uuid" : "a6a609e3-967a-48bd-8ce5-41c7ff5c19b9-2", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "pServer" : { + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "pInterfaceList" : [ ] + }, + "lInterfaceList" : [ ] + } ], + "networkList" : [ { + "uuid" : "network-id-vnf2-vfmodule1-001", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + }, { + "uuid" : "network-id-vnf2-vfmodule1-002", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + } ] + }], + "vnfcList" : [ ], + "networkList" : [ { + "uuid" : "network-id-vnf2-001", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + }, { + "uuid" : "network-id-vnf2-002", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + } ] + } ], + "pnfList" : [ ], + "networkList" : [ { + "uuid" : "network-id-service-001", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + }, { + "uuid" : "network-id-service-002", + "dataQuality" : { + "status" : "ok" + }, + "attributeList" : [ ], + "networkPolicyList" : [ ] + } ] + +} \ No newline at end of file diff --git a/src/test/resources/jolt/serviceDecompToNdResources2-expected.json b/src/test/resources/jolt/serviceDecompToNdResources2-expected.json new file mode 100644 index 0000000..173a357 --- /dev/null +++ b/src/test/resources/jolt/serviceDecompToNdResources2-expected.json @@ -0,0 +1,39 @@ +{ + "ndResources" : [ { + "resourceId" : "network-id-service-001", + "resourceType" : "l3-network" + }, { + "resourceId" : "network-id-service-002", + "resourceType" : "l3-network" + }, { + "resourceId" : "a6a609e3-967a-48bd-8ce5-41c7ff5c19b9", + "resourceType" : "vserver" + }, { + "resourceId" : "network-id-vnf1-vfmodule1-001", + "resourceType" : "l3-network" + }, { + "resourceId" : "network-id-vnf1-vfmodule1-002", + "resourceType" : "l3-network" + }, { + "resourceId" : "network-id-vnf1-001", + "resourceType" : "l3-network" + }, { + "resourceId" : "network-id-vnf1-002", + "resourceType" : "l3-network" + }, { + "resourceId" : "a6a609e3-967a-48bd-8ce5-41c7ff5c19b9-2", + "resourceType" : "vserver" + }, { + "resourceId" : "network-id-vnf2-vfmodule1-001", + "resourceType" : "l3-network" + }, { + "resourceId" : "network-id-vnf2-vfmodule1-002", + "resourceType" : "l3-network" + }, { + "resourceId" : "network-id-vnf2-001", + "resourceType" : "l3-network" + }, { + "resourceId" : "network-id-vnf2-002", + "resourceType" : "l3-network" + } ] +} \ No newline at end of file -- cgit 1.2.3-korg