diff options
Diffstat (limited to 'aai-core/src/test')
16 files changed, 1984 insertions, 114 deletions
diff --git a/aai-core/src/test/java/org/onap/aai/HttpTestUtil.java b/aai-core/src/test/java/org/onap/aai/HttpTestUtil.java index 82a3efdf..92cb59c5 100644 --- a/aai-core/src/test/java/org/onap/aai/HttpTestUtil.java +++ b/aai-core/src/test/java/org/onap/aai/HttpTestUtil.java @@ -52,11 +52,11 @@ import static org.mockito.Mockito.when; public class HttpTestUtil extends RESTAPI { - - protected HttpEntry traversalHttpEntry; - - protected HttpEntry traversalUriHttpEntry; - + + protected HttpEntry traversalHttpEntry; + + protected HttpEntry traversalUriHttpEntry; + private static final EELFLogger logger = EELFManager.getInstance().getLogger(HttpTestUtil.class); protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json"); @@ -77,7 +77,7 @@ public class HttpTestUtil extends RESTAPI { this.queryStyle = qs; traversalHttpEntry = SpringContextAware.getBean("traversalUriHttpEntry", HttpEntry.class); traversalUriHttpEntry = SpringContextAware.getBean("traversalUriHttpEntry", HttpEntry.class); - + } public void init(){ @@ -121,7 +121,10 @@ public class HttpTestUtil extends RESTAPI { try { - uri = uri.replaceAll("/aai/", ""); + if(uri.startsWith("/aai/")){ + uri = uri.substring(5); + } + logger.info("Starting the put request for the uri {} with payload {}", uri, payload); String [] arr = uri.split("/"); @@ -142,7 +145,7 @@ public class HttpTestUtil extends RESTAPI { Mockito.when(uriInfo.getPath()).thenReturn(uri); DBConnectionType type = DBConnectionType.REALTIME; - + traversalHttpEntry.setHttpEntryProperties(version, type); Loader loader = traversalHttpEntry.getLoader(); dbEngine = traversalHttpEntry.getDbEngine(); @@ -206,7 +209,7 @@ public class HttpTestUtil extends RESTAPI { return response; } - public Response doGet(String uri) throws UnsupportedEncodingException, AAIException { + public Response doGet(String uri, String depth){ this.init(); Response response = null; @@ -215,8 +218,11 @@ public class HttpTestUtil extends RESTAPI { try { - uri = uri.replaceAll("/aai/", ""); - logger.info("Starting the GET request for the uri {} with depth {}", uri, "all"); + if(uri.startsWith("/aai/")){ + uri = uri.substring(5); + } + + logger.info("Starting the GET request for the uri {} with depth {}", uri, depth); String [] arr = uri.split("/"); @@ -240,21 +246,29 @@ public class HttpTestUtil extends RESTAPI { dbEngine = traversalHttpEntry.getDbEngine(); URI uriObject = UriBuilder.fromPath(uri).build(); - URIToObject uriToObject = new URIToObject(loader, uriObject); - String objType = uriToObject.getEntityName(); - queryParameters.add("depth", "all"); + if(depth != null){ + queryParameters.add("depth", depth); + } + QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject, queryParameters); Mockito.when(uriInfo.getPath()).thenReturn(uri); + URIToObject uriToObject = new URIToObject(loader, uriObject); + String objType = ""; + if (!uriQuery.getContainerType().equals("")) { + objType = uriQuery.getContainerType(); + } else { + objType = uriQuery.getResultType(); + } logger.info("Unmarshalling the payload to this {}", objType); Introspector obj = loader.introspectorFromName(objType); DBRequest dbRequest = - new DBRequest.Builder(HttpMethod.GET, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION") - .build(); + new DBRequest.Builder(HttpMethod.GET, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION") + .build(); List<DBRequest> dbRequestList = new ArrayList<>(); dbRequestList.add(dbRequest); @@ -288,6 +302,10 @@ public class HttpTestUtil extends RESTAPI { return response; } + public Response doGet(String uri) throws UnsupportedEncodingException, AAIException { + return this.doGet(uri, "all"); + } + public Response doDelete(String uri, String resourceVersion) throws UnsupportedEncodingException, AAIException { this.init(); @@ -321,7 +339,7 @@ public class HttpTestUtil extends RESTAPI { Mockito.when(uriInfo.getPath()).thenReturn(uri); DBConnectionType type = DBConnectionType.REALTIME; traversalHttpEntry.setHttpEntryProperties(version, type); - + traversalHttpEntry.setHttpEntryProperties(version, type); Loader loader = traversalHttpEntry.getLoader(); dbEngine = traversalHttpEntry.getDbEngine(); diff --git a/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToObjectTest.java b/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToObjectTest.java index c7c1f4ca..fc2c64a1 100644 --- a/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToObjectTest.java +++ b/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToObjectTest.java @@ -19,6 +19,7 @@ */ package org.onap.aai.parsers.uri; +import org.onap.aai.schema.enums.ObjectMetadata; import org.onap.aai.setup.SchemaVersion; import org.junit.Ignore; @@ -65,7 +66,7 @@ public class URIToObjectTest extends AAISetup { currentVersion = schemaVersions.getDefaultVersion(); loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getRelatedLinkVersion()); } - + @Test public void uri() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); @@ -74,11 +75,11 @@ public class URIToObjectTest extends AAISetup { String expected = "{\"cloud-owner\":\"mycloudowner\",\"cloud-region-id\":\"mycloudregionid\",\"tenants\":{\"tenant\":[{\"tenant-id\":\"key1\",\"vservers\":{\"vserver\":[{\"vserver-id\":\"key2\",\"l-interfaces\":{\"l-interface\":[{\"interface-name\":\"key3\"}]}}]}}]}}"; String topEntity = "cloud-region"; String entity = "l-interface"; - + testSet(result.marshal(false), parse, expected, topEntity, entity, version); } - + /** * Uri no version. * @@ -86,7 +87,7 @@ public class URIToObjectTest extends AAISetup { * @throws AAIException the AAI exception * @throws IllegalArgumentException the illegal argument exception * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIUnknownObjectException + * @throws AAIUnknownObjectException */ @Test public void uriNoVersion() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException, AAIUnknownObjectException { @@ -106,12 +107,12 @@ public class URIToObjectTest extends AAISetup { String expected = "{\"cloud-owner\":\"mycloudowner\",\"cloud-region-id\":\"mycloudregionid\",\"tenants\":{\"tenant\":[{\"tenant-id\":\"key1\",\"tenant-name\":\"name1\",\"vservers\":{\"vserver\":[{\"vserver-id\":\"key2\",\"vserver-name\":\"name2\",\"l-interfaces\":{\"l-interface\":[{\"interface-name\":\"key3\"}]}}]}}]}}"; String topEntity = "cloud-region"; String entity = "l-interface"; - + testSet(result.marshal(false), parse, expected, topEntity, entity, version); - + } - + /** * Bad URI. @@ -124,13 +125,13 @@ public class URIToObjectTest extends AAISetup { @Test public void badURI() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interadsfaces/l-interface/key3").build(); - + thrown.expect(AAIException.class); thrown.expect(hasProperty("code", is("AAI_3000"))); - + new URIToObject(loader, uri); } - + /** * Starts with valid namespace. * @@ -147,10 +148,10 @@ public class URIToObjectTest extends AAISetup { String expected = "{\"cloud-owner\":\"mycloudowner\",\"cloud-region-id\":\"mycloudregionid\",\"tenants\":{\"tenant\":[{\"tenant-id\":\"key1\",\"vservers\":{\"vserver\":[{\"vserver-id\":\"key2\",\"l-interfaces\":{\"l-interface\":[{\"interface-name\":\"key3\"}]}}]}}]}}"; String topEntity = "cloud-region"; String entity = "l-interface"; - + testSet(result.marshal(false), parse, expected, topEntity, entity, version); } - + /** * Single top level. * @@ -165,14 +166,14 @@ public class URIToObjectTest extends AAISetup { URIToObject parse = new URIToObject(loader, uri); Introspector result = parse.getTopEntity(); String expected = "{\"vnf-id\":\"key1\"}"; - + String topEntity = "generic-vnf"; String entity = "generic-vnf"; - + testSet(result.marshal(false), parse, expected, topEntity, entity, version); } - + /** * Naming exceptions. * @@ -190,11 +191,11 @@ public class URIToObjectTest extends AAISetup { String expected = "{\"vnf-id\":\"key1\",\"port-groups\":{\"port-group\":[{\"interface-id\":\"key2\",\"cvlan-tags\":{\"cvlan-tag-entry\":[{\"cvlan-tag\":655}]}}]}}"; String topEntity = "vce"; String entity = "cvlan-tag"; - + testSet(result.marshal(false), parse, expected, topEntity, entity, version); } - + /** * No list object. * @@ -212,23 +213,23 @@ public class URIToObjectTest extends AAISetup { String entity = "l3-interface-ipv4-address-list"; String expected = "{\"equipment-name\":\"0e6189fd-9257-49b9-a3be-d7ba980ccfc9\",\"lag-interfaces\":{\"lag-interface\":[{\"interface-name\":\"8ae5aa76-d597-4382-b219-04f266fe5e37\",\"l-interfaces\":{\"l-interface\":[{\"interface-name\":\"9e141d03-467b-437f-b4eb-b3133ec1e205\",\"l3-interface-ipv4-address-list\":[{\"l3-interface-ipv4-address\":\"8f19f0ea-a81f-488e-8d5c-9b7b53696c11\"}]}]}}]}}"; testSet(result.marshal(false), parse, expected, topEntity, entity, version); - + } - + @Test public void relativePath() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { URI uri = UriBuilder.fromPath("./l-interfaces/l-interface/key1").build(); URIToObject parse = new URIToObject(loader, uri); Introspector result = parse.getEntity(); String expected = "{\"interface-name\":\"key1\"}"; - + String topEntity = "l-interface"; String entity = "l-interface"; - + testSet(result.marshal(false), parse, expected, topEntity, entity, version); } - + /** * Test set. * @@ -241,15 +242,15 @@ public class URIToObjectTest extends AAISetup { */ public void testSet(String json, URIToObject parse, String expected, String topEntity, String entity, SchemaVersion version) { assertEquals("blah", expected, json); - + assertEquals("top entity", topEntity, parse.getTopEntityName()); assertEquals("entity", entity, parse.getEntityName()); assertEquals("entity object", entity, parse.getEntity().getDbName()); - + assertEquals("parent list object", 1, parse.getParentList().size()); - + assertEquals("object version", version, parse.getObjectVersion()); } } diff --git a/aai-core/src/test/java/org/onap/aai/rest/EdgeNotValidAnymoreTest.java b/aai-core/src/test/java/org/onap/aai/rest/EdgeNotValidAnymoreTest.java new file mode 100644 index 00000000..1a69fc58 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/rest/EdgeNotValidAnymoreTest.java @@ -0,0 +1,120 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.rest; + +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.structure.Edge; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.janusgraph.core.JanusGraph; +import org.janusgraph.core.JanusGraphTransaction; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.HttpTestUtil; +import org.onap.aai.PayloadUtil; +import org.onap.aai.db.props.AAIProperties; +import org.onap.aai.dbmap.AAIGraph; +import org.onap.aai.edges.enums.EdgeField; +import org.onap.aai.edges.enums.EdgeProperty; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.serialization.engines.QueryStyle; + +import javax.ws.rs.core.Response; +import java.io.IOException; +import java.util.UUID; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.not; +import static org.junit.Assert.assertThat; + +public class EdgeNotValidAnymoreTest extends AAISetup { + + private HttpTestUtil testUtil; + + @Before + public void setupData() throws IOException, AAIException { + + String cloudRegionEndpoint = "/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/junit-cloud-owner-with-vlan/junit-cloud-region-with-vlan"; + + String cloudRegionBody = PayloadUtil.getResourcePayload("cloud-region-with-vlan.json"); + testUtil = new HttpTestUtil(QueryStyle.TRAVERSAL_URI); + testUtil.doPut(cloudRegionEndpoint, cloudRegionBody); + + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + GraphTraversalSource g = transaction.traversal(); + + Vertex configurationVertex = g.addV() + .property( AAIProperties.NODE_TYPE, "configuration") + .property( "configuration-id", "ci1") + .property( "configuration-type", "ci1") + .property( AAIProperties.AAI_URI, "/network/configurations/configuration/ci1") + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT") + .next(); + + Vertex vlanVertex = g.V() + .has("vlan-interface", "test-vlan-interface-1") + .has(AAIProperties.NODE_TYPE, "vlan") + .next(); + + Edge edge = configurationVertex.addEdge("org.onap.relationships.inventory.PartOf", vlanVertex); + addEdge(edge); + + transaction.commit(); + } + + public void addEdge(Edge edge) { + edge.property(EdgeProperty.CONTAINS.toString(), "NONE"); + edge.property(EdgeProperty.DELETE_OTHER_V.toString(), "NONE"); + edge.property(EdgeProperty.PREVENT_DELETE.toString(), "NONE"); + edge.property(EdgeField.PRIVATE.toString(), false); + edge.property(AAIProperties.AAI_UUID, UUID.randomUUID().toString()); + } + + @Test + public void testWhenEdgeRuleIsNoLongerValidEnsureItRetrievesVertexesWithoutOldEdges() { + + String endpoint = "/aai/v14/network/configurations"; + + Response response = testUtil.doGet(endpoint, null); + assertThat(response.getStatus(), is(200)); + + String body = response.getEntity().toString(); + + assertThat(body, containsString("configuration-id")); + assertThat(body, not(containsString("vlan"))); + } + + @After + public void teardown(){ + + JanusGraph janusGraph = AAIGraph.getInstance().getGraph(); + JanusGraphTransaction transaction = janusGraph.newTransaction(); + GraphTraversalSource g = transaction.traversal(); + + g.V() + .has(AAIProperties.SOURCE_OF_TRUTH, "JUNIT") + .toList() + .forEach((edge) -> edge.remove()); + + transaction.commit(); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/rest/EntitlementTest.java b/aai-core/src/test/java/org/onap/aai/rest/EntitlementTest.java new file mode 100644 index 00000000..3559b9d6 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/rest/EntitlementTest.java @@ -0,0 +1,96 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.rest; + +import com.jayway.jsonpath.JsonPath; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.onap.aai.AAISetup; +import org.onap.aai.HttpTestUtil; +import org.onap.aai.PayloadUtil; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.serialization.engines.QueryStyle; +import org.skyscreamer.jsonassert.JSONAssert; +import org.springframework.test.annotation.DirtiesContext; + +import javax.ws.rs.core.Response; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Arrays; +import java.util.Collection; + +import static org.junit.Assert.assertEquals; + +@RunWith(value = Parameterized.class) +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS) +public class EntitlementTest extends AAISetup { + + private HttpTestUtil httpTestUtil; + + @Parameterized.Parameter(value = 0) + public QueryStyle queryStyle; + + private String vnfPayload; + + private String vnfUri; + + @Parameterized.Parameters(name = "QueryStyle.{0}") + public static Collection<Object[]> data() { + return Arrays.asList(new Object[][]{ + {QueryStyle.TRAVERSAL_URI} + }); + } + + @Before + public void setUp() throws IOException { + httpTestUtil = new HttpTestUtil(queryStyle); + vnfPayload = PayloadUtil.getResourcePayload("vnf.json"); + vnfUri = "/aai/v14/network/generic-vnfs/generic-vnf/vnf1"; + } + + @Test + public void testPutGenericVnfAndThenInsertEntitlement() throws IOException, AAIException { + String entitlementPayload = PayloadUtil.getResourcePayload("entitlement.json"); + String entitlementUri = "/aai/v14/network/generic-vnfs/generic-vnf/vnf1/entitlements/entitlement/g1/r1"; + Response response = httpTestUtil.doPut(vnfUri, vnfPayload); + assertEquals("Expected the Generic Vnf to be created", 201, response.getStatus()); + + response = httpTestUtil.doGet(vnfUri); + assertEquals("Expected the Generic Vnf to be found", 200, response.getStatus()); + String jsonResponse = response.getEntity().toString(); + JSONAssert.assertEquals(vnfPayload, jsonResponse, false); + + response = httpTestUtil.doPut(entitlementUri, entitlementPayload); + assertEquals("Expected the Entitlement to be created", 201, response.getStatus()); + } + + @After + public void tearDown() throws UnsupportedEncodingException, AAIException { + Response response = httpTestUtil.doGet(vnfUri); + assertEquals("Expected the Generic Vnf to be found", 200, response.getStatus()); + String jsonResponse = response.getEntity().toString(); + String resourceVersion = JsonPath.read(jsonResponse, "$.resource-version"); + response = httpTestUtil.doDelete(vnfUri, resourceVersion); + assertEquals("Expected the cloud region to be deleted", 204, response.getStatus()); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/rest/ModelElementTest.java b/aai-core/src/test/java/org/onap/aai/rest/ModelElementTest.java new file mode 100644 index 00000000..d808c993 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/rest/ModelElementTest.java @@ -0,0 +1,98 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.rest; + +import com.jayway.jsonpath.JsonPath; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.onap.aai.AAISetup; +import org.onap.aai.HttpTestUtil; +import org.onap.aai.PayloadUtil; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.serialization.engines.QueryStyle; +import org.skyscreamer.jsonassert.JSONAssert; +import org.springframework.test.annotation.DirtiesContext; + +import javax.ws.rs.core.Response; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Arrays; +import java.util.Collection; + +import static org.junit.Assert.assertEquals; + +@RunWith(value = Parameterized.class) +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS) +public class ModelElementTest extends AAISetup { + + private HttpTestUtil httpTestUtil; + + @Parameterized.Parameter(value = 0) + public QueryStyle queryStyle; + + private String modelPayload; + private String modelElementPayload; + + private String modelUri; + private String modelElementUri; + + @Parameterized.Parameters(name = "QueryStyle.{0}") + public static Collection<Object[]> data() { + return Arrays.asList(new Object[][]{ + {QueryStyle.TRAVERSAL_URI} + }); + } + + @Before + public void setUp() throws IOException { + httpTestUtil = new HttpTestUtil(queryStyle); + modelPayload = PayloadUtil.getResourcePayload("model.json"); + modelElementPayload = PayloadUtil.getResourcePayload("model-element.json"); + modelUri = "/aai/v14/service-design-and-creation/models/model/24c04fc5-f3f8-43ec-8792-c6f940638676-test1"; + modelElementUri = "/aai/v14/service-design-and-creation/models/model/24c04fc5-f3f8-43ec-8792-c6f940638676-test1/model-vers/model-ver/0c4c59f0-9864-43ca-b0c2-ca38746b72a5-test1/model-elements/model-element/0dc2b8b6-af8d-4213-970b-7861a603fc86-test1/model-constraints/model-constraint/782ba24a-28ab-4fd0-8e69-da10cc5373f3-test1/constrained-element-sets/constrained-element-set/a33e65c3-1198-4d4c-9799-2b521e4c4212-test1/element-choice-sets/element-choice-set/7df27a94-06c8-46ef-9fc2-5900d8cffbb0-test1/model-elements/model-element/acf8b6cf-e051-4c1b-bcad-b24792f826cf-test1"; + } + + @Test + public void testPutModelAndThenModelElementAndItShouldSucceed() throws IOException, AAIException { + Response response = httpTestUtil.doPut(modelUri, modelPayload); + assertEquals("Expected the cloud region to be created", 201, response.getStatus()); + + response = httpTestUtil.doGet(modelUri); + assertEquals("Expected the cloud region to be found", 200, response.getStatus()); + String jsonResponse = response.getEntity().toString(); + JSONAssert.assertEquals(modelPayload, jsonResponse, false); + + response = httpTestUtil.doPut(modelElementUri, modelElementPayload); + assertEquals("Expected the cloud region to be created", 201, response.getStatus()); + } + + @After + public void tearDown() throws UnsupportedEncodingException, AAIException { + Response response = httpTestUtil.doGet(modelUri); + assertEquals("Expected the cloud region to be found", 200, response.getStatus()); + String jsonResponse = response.getEntity().toString(); + String resourceVersion = JsonPath.read(jsonResponse, "$.resource-version"); + response = httpTestUtil.doDelete(modelUri, resourceVersion); + assertEquals("Expected the cloud region to be deleted", 204, response.getStatus()); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/rest/PserverDuplicateTest.java b/aai-core/src/test/java/org/onap/aai/rest/PserverDuplicateTest.java new file mode 100644 index 00000000..71e53be8 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/rest/PserverDuplicateTest.java @@ -0,0 +1,135 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.rest; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.janusgraph.core.JanusGraph; +import org.janusgraph.core.JanusGraphTransaction; +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.HttpTestUtil; +import org.onap.aai.db.props.AAIProperties; +import org.onap.aai.dbmap.AAIGraph; +import org.onap.aai.serialization.engines.QueryStyle; + +import javax.ws.rs.core.Response; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.fail; + +public class PserverDuplicateTest extends AAISetup { + + private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(PserverDuplicateTest.class); + + private HttpTestUtil testUtil; + + private String hostname; + + public boolean createDuplicate() throws InterruptedException { + + hostname = getHostname(); + final String aaiUri = "/cloud-infrastructure/pservers/pserver/" + hostname; + final int threads = getNumberOfThreads(); + + ExecutorService service = Executors.newFixedThreadPool(threads); + + JanusGraph janusGraph = AAIGraph.getInstance().getGraph(); + // Due to the lazy instantiation of the graph, it needs to create a new transaction to create schema + janusGraph.newTransaction().rollback(); + + service.invokeAll( + IntStream.range(0, threads) + .mapToObj((i) -> (Callable<Void>) () -> { + JanusGraphTransaction transaction = janusGraph.newTransaction(); + GraphTraversalSource g = transaction.traversal(); + g.addV() + .property(AAIProperties.AAI_URI, aaiUri) + .property(AAIProperties.NODE_TYPE, "pserver") + .property("hostname", hostname) + .next(); + transaction.commit(); + return null; + }).collect(Collectors.toList()) + , 7, TimeUnit.SECONDS + ); + + JanusGraphTransaction readOnlyTransaction = AAIGraph.getInstance().getGraph().buildTransaction().readOnly().start(); + GraphTraversalSource g = readOnlyTransaction.traversal(); + + List<Vertex> pserverList = g.V().has(AAIProperties.AAI_URI, aaiUri).toList(); + LOGGER.debug("Number of pservers with uri {} is {}", aaiUri, pserverList.size()); + + testUtil = new HttpTestUtil(QueryStyle.TRAVERSAL_URI); + + if(pserverList.size() == 1){ + return false; + } + return true; + } + + + @Test + public void testWhenDuplicatesExistInGraphThatGetAllSuceeds() throws InterruptedException { + + int totalRetries = getNumOfRetries(); + for(int retry = 0; retry < totalRetries; retry++){ + if(!this.createDuplicate()){ + if(retry == (totalRetries-1)){ + fail("Unable to produce duplicates in the graph, " + + "please increase retry or ignore test if it becomes impossible to create duplicate this test"); + } + } else { + // Successfully created a duplicate in the janus graph + break; + } + } + + String endpoint = "/aai/v14/cloud-infrastructure/pservers"; + + Response response = testUtil.doGet(endpoint, null); + LOGGER.info("GET ALL Pservers with duplicates status code {} and body {}", response.getStatus(), response.getEntity()); + assertThat(response.getStatus(), is(200)); + } + + public String getHostname(){ + return UUID.randomUUID().toString(); + } + + public int getNumOfRetries(){ + return 10; + } + + public int getNumberOfThreads(){ + return 10; + } +} + diff --git a/aai-core/src/test/java/org/onap/aai/rest/VipAddressListTest.java b/aai-core/src/test/java/org/onap/aai/rest/VipAddressListTest.java new file mode 100644 index 00000000..0351c2c3 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/rest/VipAddressListTest.java @@ -0,0 +1,99 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.rest; + +import com.jayway.jsonpath.JsonPath; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.onap.aai.AAISetup; +import org.onap.aai.HttpTestUtil; +import org.onap.aai.PayloadUtil; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.serialization.engines.QueryStyle; +import org.skyscreamer.jsonassert.JSONAssert; + +import javax.ws.rs.core.Response; +import java.io.IOException; +import java.util.Arrays; +import java.util.Collection; + +import static org.junit.Assert.assertEquals; + +@RunWith(value = Parameterized.class) +public class VipAddressListTest extends AAISetup { + + private HttpTestUtil httpTestUtil; + + @Parameterized.Parameter(value = 0) + public QueryStyle queryStyle; + + @Parameterized.Parameters(name = "QueryStyle.{0}") + public static Collection<Object[]> data() { + return Arrays.asList(new Object[][]{ + {QueryStyle.TRAVERSAL_URI} + }); + } + + @Before + public void setUp(){ + httpTestUtil = new HttpTestUtil(queryStyle); + } + + @Test + public void testPutWithAllCloudRegionChildrenNodesAndCheckIfDeleteIsSuccessful() throws IOException, AAIException { + + String cloudRegionPayload = PayloadUtil.getResourcePayload("cloud-region.json"); + String cloudRegionUri = "/aai/v14/cloud-infrastructure/cloud-regions/cloud-region/cloud-region-owner-with-vip-ipv4/cloud-region-id-with-vip-ipv4"; + + Response response = httpTestUtil.doPut(cloudRegionUri, cloudRegionPayload); + assertEquals("Expected the cloud region to be created", 201, response.getStatus()); + + response = httpTestUtil.doGet(cloudRegionUri); + assertEquals("Expected the cloud region to be found", 200, response.getStatus()); + String jsonResponse = response.getEntity().toString(); + + JSONAssert.assertEquals(cloudRegionPayload, jsonResponse, false); + + String vipIpv4Uri = cloudRegionUri + "/vip-ipv4-address-list/vip-ipv4-address-list-1"; + String vipIpv4Payload = PayloadUtil.getResourcePayload("vip-ipv4-address-list.json"); + + response = httpTestUtil.doPut(vipIpv4Uri, vipIpv4Payload); + assertEquals("Expected the ipv4 address list to be created", 201, response.getStatus()); + + response = httpTestUtil.doGet(vipIpv4Uri); + assertEquals("Expected the ipv4 address list to be found", 200, response.getStatus()); + + jsonResponse = response.getEntity().toString(); + String resourceVersion = JsonPath.read(jsonResponse, "$.resource-version"); + + response = httpTestUtil.doDelete(vipIpv4Uri, resourceVersion); + assertEquals("Expected the ipv4 address list to be deleted", 204, response.getStatus()); + + response = httpTestUtil.doGet(cloudRegionUri); + jsonResponse = response.getEntity().toString(); + resourceVersion = JsonPath.read(jsonResponse, "$.resource-version"); + + response = httpTestUtil.doDelete(cloudRegionUri, resourceVersion); + assertEquals("Expected the cloud region to be deleted", 204, response.getStatus()); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java b/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java index a5b968b3..5041c7d1 100644 --- a/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java +++ b/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java @@ -465,16 +465,18 @@ public class DbSerializerTest extends AAISetup { public void getURIForVertexTest() throws AAIException, URISyntaxException, UnsupportedEncodingException { engine.startTransaction(); - Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123"); + Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123", "aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/me/123"); Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453"); edgeSer.addTreeEdge(engine.tx().traversal(), cr, ten); + ten.property("aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453"); + URI compare = new URI("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453"); assertEquals(compare, dbser.getURIForVertex(ten)); - cr.property("aai-node-type").remove(); URI compareFailure = new URI("/unknown-uri"); + ten.property("aai-uri").remove(); assertEquals(compareFailure, dbser.getURIForVertex(ten)); } @@ -619,9 +621,10 @@ public class DbSerializerTest extends AAISetup { public void serializeSingleVertexChildTest() throws AAIException, UnsupportedEncodingException { engine.startTransaction(); - Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123"); + Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123", "aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/me/123"); Introspector tenIn = loader.introspectorFromName("tenant"); Vertex ten = dbser.createNewVertex(tenIn); + ten.property("aai-uri", cr.property("aai-uri").value().toString() + "/tenants/tenant/453"); edgeSer.addTreeEdge(engine.tx().traversal(), cr, ten); @@ -639,8 +642,8 @@ public class DbSerializerTest extends AAISetup { public void getVertexPropertiesRelationshipHasLabelTest() throws AAIException, UnsupportedEncodingException { engine.startTransaction(); - Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","vnf-123"); - Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","vnfc-123"); + Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","vnf-123","aai-uri", "/network/generic-vnfs/generic-vnf/vnf-123"); + Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","vnfc-123","aai-uri", "/network/vnfcs/vnfc/vnfc-123"); edgeSer.addEdge(engine.tx().traversal(), gvnf, vnfc); @@ -672,8 +675,8 @@ public class DbSerializerTest extends AAISetup { engine.startTransaction(); - Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","vnf-123"); - Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","vnfc-123"); + Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","vnf-123", "aai-uri", "/network/generic-vnfs/generic-vnf/vnf-123"); + Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","vnfc-123", "aai-uri", "/network/vnfcs/vnfc/vnfc-123"); edgeSer.addEdge(engine.tx().traversal(), gvnf, vnfc); diff --git a/aai-core/src/test/java/org/onap/aai/serialization/engines/query/GraphTraversalQueryEngineTest.java b/aai-core/src/test/java/org/onap/aai/serialization/engines/query/GraphTraversalQueryEngineTest.java index a24855b8..b9431217 100644 --- a/aai-core/src/test/java/org/onap/aai/serialization/engines/query/GraphTraversalQueryEngineTest.java +++ b/aai-core/src/test/java/org/onap/aai/serialization/engines/query/GraphTraversalQueryEngineTest.java @@ -38,6 +38,7 @@ import org.springframework.test.annotation.DirtiesContext; import java.io.InputStream; import java.util.*; +import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -53,30 +54,30 @@ public class GraphTraversalQueryEngineTest extends AAISetup { public void testFindParents() throws AAIException { //setup Graph graph = TinkerGraph.open(); - + Vertex cloudreg = graph.addVertex(T.id, "00", "aai-node-type", "cloud-region"); Vertex tenant = graph.addVertex(T.id, "10", "aai-node-type", "tenant"); Vertex vserver = graph.addVertex(T.id, "20", "aai-node-type", "vserver"); - + GraphTraversalSource g = graph.traversal(); - + edgeSer.addTreeEdge(g, cloudreg, tenant); edgeSer.addTreeEdge(g, tenant, vserver); - + //expect start vertex back plus any parents List<Vertex> crExpected = new ArrayList<>(Arrays.asList(cloudreg)); //no parents List<Vertex> tenExpected = new ArrayList<>(Arrays.asList(tenant, cloudreg)); //only has the immediate parent List<Vertex> vsExpected = new ArrayList<>(Arrays.asList(vserver, tenant, cloudreg)); //parent & grandparent - + GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g); - + //test List<Vertex> crRes = engine.findParents(cloudreg); assertTrue(crRes.containsAll(crExpected) && crExpected.containsAll(crRes)); - + List<Vertex> tenRes = engine.findParents(tenant); assertTrue(tenRes.containsAll(tenExpected) && tenExpected.containsAll(tenRes)); - + List<Vertex> vsRes = engine.findParents(vserver); assertTrue(vsRes.containsAll(vsExpected) && vsExpected.containsAll(vsRes)); //verify expected ordering - start, parent, grandparent @@ -84,131 +85,157 @@ public class GraphTraversalQueryEngineTest extends AAISetup { assertTrue(vsRes.get(1).equals(tenant)); assertTrue(vsRes.get(2).equals(cloudreg)); } - + + @Test + public void testFindAllParentsGivenAaiUris(){ + + //setup + Graph graph = TinkerGraph.open(); + + Vertex cloudreg = graph.addVertex(T.id, "00", "aai-node-type", "cloud-region", "aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/testowner/testid"); + Vertex tenant = graph.addVertex(T.id, "10", "aai-node-type", "tenant", "aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/testowner/testid/tenants/tenant/testTenant1"); + Vertex vserver = graph.addVertex(T.id, "20", "aai-node-type", "vserver", "aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/testowner/testid/tenants/tenant/testTenant1/vservers/vserver/testVserver1"); + + String [] uris = new String[]{ + "/cloud-infrastructure/cloud-regions/cloud-region/testowner/testid/tenants/tenant/testTenant1", + "/cloud-infrastructure/cloud-regions/cloud-region/testowner/testid/tenants/tenant/testTenant1/vservers/vserver/testVserver1", + "/cloud-infrastructure/cloud-regions/cloud-region/testowner/testid" + }; + + GraphTraversalSource g = graph.traversal(); + GraphTraversalQueryEngine queryEngine = new GraphTraversalQueryEngine(g); + List<Vertex> vertices = queryEngine.findParents(uris); + + assertThat("Returned vertices should be 3 cloud region, tenant and vserver", vertices.size(), is(3)); + assertThat("Expected the first element back to be vserver", vertices.get(0), is(vserver)); + assertThat("Expected the second element back to be tenant", vertices.get(1), is(tenant)); + assertThat("Expected the element back to be cloud region", vertices.get(2), is(cloudreg)); + } + @Test public void testFindAllChildren() throws AAIException { //setup Graph graph = TinkerGraph.open(); - + Vertex cloudreg = graph.addVertex(T.id, "00", "aai-node-type", "cloud-region"); Vertex tenant = graph.addVertex(T.id, "10", "aai-node-type", "tenant"); Vertex vserver = graph.addVertex(T.id, "20", "aai-node-type", "vserver"); Vertex vserver2 = graph.addVertex(T.id, "21", "aai-node-type", "vserver"); Vertex oam = graph.addVertex(T.id, "30", "aai-node-type", "oam-network"); - + GraphTraversalSource g = graph.traversal(); - + edgeSer.addTreeEdge(g, cloudreg, tenant); edgeSer.addTreeEdge(g, tenant, vserver); edgeSer.addTreeEdge(g, tenant, vserver2); edgeSer.addTreeEdge(g, cloudreg, oam); - + List<Vertex> crExpected = new ArrayList<>(Arrays.asList(cloudreg, tenant, vserver, vserver2, oam)); List<Vertex> vsExpected = new ArrayList<>(Arrays.asList(vserver)); - + GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g); - + //test List<Vertex> crRes = engine.findAllChildren(cloudreg); assertTrue(crRes.containsAll(crExpected) && crExpected.containsAll(crRes)); - + List<Vertex> vsRes = engine.findAllChildren(vserver); assertTrue(vsRes.containsAll(vsExpected) && vsExpected.containsAll(vsRes)); } - + @Test public void testFindChildrenOfType() throws AAIException { //setup Graph graph = TinkerGraph.open(); - + Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf"); Vertex lint1 = graph.addVertex(T.id, "10", "aai-node-type", "l-interface"); Vertex lint2 = graph.addVertex(T.id, "11", "aai-node-type", "l-interface"); Vertex lag = graph.addVertex(T.id, "20", "aai-node-type", "lag-interface"); Vertex lint3 = graph.addVertex(T.id, "12", "aai-node-type", "l-interface"); - + GraphTraversalSource g = graph.traversal(); - + edgeSer.addTreeEdge(g, gv, lint1); edgeSer.addTreeEdge(g, gv, lint2); edgeSer.addTreeEdge(g, gv, lag); edgeSer.addTreeEdge(g, lag, lint3); - + List<Vertex> expected = new ArrayList<>(Arrays.asList(lint1, lint2)); - + GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g); - + //test List<Vertex> results = engine.findChildrenOfType(gv, "l-interface"); assertTrue(results.containsAll(expected) && expected.containsAll(results)); } - + @Test public void testFindChildren() throws AAIException { //setup Graph graph = TinkerGraph.open(); - + Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf"); Vertex lint1 = graph.addVertex(T.id, "10", "aai-node-type", "l-interface"); Vertex lint2 = graph.addVertex(T.id, "11", "aai-node-type", "l-interface"); Vertex lag = graph.addVertex(T.id, "20", "aai-node-type", "lag-interface"); Vertex lint3 = graph.addVertex(T.id, "12", "aai-node-type", "l-interface"); - + GraphTraversalSource g = graph.traversal(); - + edgeSer.addTreeEdge(g, gv, lint1); edgeSer.addTreeEdge(g, gv, lint2); edgeSer.addTreeEdge(g, gv, lag); edgeSer.addTreeEdge(g, lag, lint3); - + List<Vertex> expected = new ArrayList<>(Arrays.asList(lint1, lint2, lag)); - + GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g); - + //test List<Vertex> results = engine.findChildren(gv); assertTrue(results.containsAll(expected) && expected.containsAll(results)); } - + @Test public void testFindRelatedVertices() throws AAIException { //setup - + Graph graph = TinkerGraph.open(); - + Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf"); Vertex lint = graph.addVertex(T.id, "10", "aai-node-type", "l-interface"); Vertex lint2 = graph.addVertex(T.id, "11", "aai-node-type", "l-interface"); Vertex log = graph.addVertex(T.id, "20", "aai-node-type", "logical-link"); - + GraphTraversalSource g = graph.traversal(); - + edgeSer.addTreeEdge(g, gv, lint); edgeSer.addEdge(g, lint, log); edgeSer.addEdge(g, log, lint2); - + List<Vertex> outExpected = new ArrayList<>(Arrays.asList(lint)); List<Vertex> inExpected = new ArrayList<>(Arrays.asList(lint, lint2)); List<Vertex> bothExpected = new ArrayList<>(Arrays.asList(log)); - + GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g); - + //test List<Vertex> outRes = engine.findRelatedVertices(gv, Direction.IN, "org.onap.relationships.inventory.BelongsTo", "l-interface"); assertTrue(outRes.containsAll(outExpected) && outExpected.containsAll(outRes)); List<Vertex> inRes = engine.findRelatedVertices(log, Direction.IN, "tosca.relationships.network.LinksTo", "l-interface"); assertTrue(inRes.containsAll(inExpected) && inExpected.containsAll(inRes)); - + List<Vertex> bothRes = engine.findRelatedVertices(lint, Direction.BOTH, "tosca.relationships.network.LinksTo", "logical-link"); assertTrue(bothRes.containsAll(bothExpected) && bothExpected.containsAll(bothRes)); } - + @Test public void testFindSubGraph() throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException { //setup Graph graph = TinkerGraph.open(); - + Vertex cr = graph.addVertex(T.id, "00", "aai-node-type", "cloud-region"); Vertex ten = graph.addVertex(T.id, "10", "aai-node-type", "tenant"); Vertex ten2 = graph.addVertex(T.id, "11", "aai-node-type", "tenant"); @@ -225,7 +252,7 @@ public class GraphTraversalQueryEngineTest extends AAISetup { Vertex modelVer = graph.addVertex(T.id, "100", "aai-node-type", "model-ver"); GraphTraversalSource g = graph.traversal(); - + Edge crTen = edgeSer.addTreeEdge(g, cr, ten); Edge crTen2 = edgeSer.addTreeEdge(g, cr, ten2); Edge tenVs = edgeSer.addTreeEdge(g, ten, vs); @@ -234,14 +261,14 @@ public class GraphTraversalQueryEngineTest extends AAISetup { Edge lintLog = edgeSer.addEdge(g, lint, log); Edge vsGv = edgeSer.addEdge(g, vs, gv); edgeSer.addEdge(g, gv, vnfc); - + edgeSer.addTreeEdge(g, gv, lag); edgeSer.addTreeEdge(g, lag, lint2); Edge modelVerEdge = edgeSer.addPrivateEdge(g, gv, modelVer, null); edgeSer.addTreeEdge(g, comp, ctag); Edge crComp = edgeSer.addEdge(g, cr, comp); - + //findSubGraph(cr, 0, true) List<Element> expected1 = new ArrayList<>(Arrays.asList(cr)); //findSubGraph(cr, 2, true) @@ -249,48 +276,48 @@ public class GraphTraversalQueryEngineTest extends AAISetup { crTen, crTen2, tenVs, tenVs2)); //findSubGraph(cr) List<Element> expected3 = new ArrayList<>(Arrays.asList(cr, ten, ten2, comp, vs, vs2, lint, gv, log, - crTen, crTen2, crComp, tenVs, tenVs2, vsLInt, + crTen, crTen2, crComp, tenVs, tenVs2, vsLInt, vsGv, lintLog)); - + GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g); - + //test Tree<Element> res1 = engine.findSubGraph(cr, 0, true); Set<Element> resList1 = treeToList(res1); assertTrue(resList1.containsAll(expected1) && expected1.containsAll(resList1)); - + Tree<Element> res2 = engine.findSubGraph(cr, 2, true); Set<Element> resList2 = treeToList(res2); assertTrue(resList2.containsAll(expected2) && expected2.containsAll(resList2)); - + Tree<Element> res3 = engine.findSubGraph(cr); Set<Element> resList3 = treeToList(res3); assertThat(resList3, containsInAnyOrder(expected3.toArray())); // assertTrue(resList3.containsAll(expected3) && expected3.containsAll(resList3)); } - + /** - * convenience helper method to make it easier to check the contents of the tree against + * convenience helper method to make it easier to check the contents of the tree against * a list of expected results * @param tree - the tree whose contents you want in collection form * @return set of the contents of the tree */ private Set<Element> treeToList(Tree<Element> tree) { Set<Element> ret = new HashSet<>(); - + for (Element key : tree.keySet()) { ret.add(key); ret.addAll(treeToList(tree.get(key))); } - + return ret; } - + @Test public void testFindEdgesForVersion() throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException { //setup Graph graph = TinkerGraph.open(); - + Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf"); Vertex vnfc = graph.addVertex(T.id, "10", "aai-node-type", "vnfc"); Vertex lob = graph.addVertex(T.id, "20", "aai-node-type", "line-of-business"); @@ -303,16 +330,16 @@ public class GraphTraversalQueryEngineTest extends AAISetup { .addEdge("some-edge", cr, CONTAINS.toString(), "NONE"); GraphTraversalSource g = graph.traversal(); - + edgeSer.addTreeEdge(g, gv, lint); //tree edge so shouldn't appear in results Edge gvVnfc = edgeSer.addEdge(g, gv, vnfc); edgeSer.addEdge(g, gv, lob); //v11/12 not v10 Edge gvMvEdge = edgeSer.addPrivateEdge(g, gv, mv, null); List<Edge> expected = new ArrayList<>(Arrays.asList(gvVnfc)); - + GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g); - + //test Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getRelatedLinkVersion()); List<Edge> results = engine.findEdgesForVersion(gv, loader); @@ -322,27 +349,27 @@ public class GraphTraversalQueryEngineTest extends AAISetup { results = engine.findEdgesForVersion(cr, loader); assertThat(results, containsInAnyOrder(expected.toArray())); } - + @Test public void testFindCousinVertices() throws AAIException { //setup Graph graph = TinkerGraph.open(); - + Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf"); Vertex vnfc = graph.addVertex(T.id, "10", "aai-node-type", "vnfc"); Vertex lob = graph.addVertex(T.id, "20", "aai-node-type", "line-of-business"); Vertex lint = graph.addVertex(T.id, "30", "aai-node-type", "l-interface"); - + GraphTraversalSource g = graph.traversal(); - + edgeSer.addTreeEdge(g, gv, lint); //tree edge so shouldn't appear in results edgeSer.addEdge(g, gv, vnfc); edgeSer.addEdge(g, gv, lob); - + List<Vertex> expected = new ArrayList<>(Arrays.asList(vnfc, lob)); - + GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g); - + //test List<Vertex> results = engine.findCousinVertices(gv); assertTrue(results.containsAll(expected) && expected.containsAll(results)); diff --git a/aai-core/src/test/resources/payloads/resource/cloud-region-with-vlan.json b/aai-core/src/test/resources/payloads/resource/cloud-region-with-vlan.json new file mode 100644 index 00000000..bad4fadf --- /dev/null +++ b/aai-core/src/test/resources/payloads/resource/cloud-region-with-vlan.json @@ -0,0 +1,50 @@ +{ + "cloud-owner" : "junit-cloud-owner-with-vlan", + "cloud-region-id" : "junit-cloud-region-with-vlan", + "cloud-type" : "P9P1X6U9eDXR", + "owner-defined-type" : "OUrR8kI6Br", + "tenants" : { + "tenant" : [ { + "tenant-id" : "tenant1-with-vlan", + "tenant-name" : "yhgVBcv3Pr", + "vservers" : { + "vserver" : [ { + "vserver-id" : "vserver1-with-vlan", + "vserver-name" : "P3SJ347Uyv", + "vserver-name2" : "1dHd", + "vserver-selflink" : "v7dU8H", + "in-maint" : false, + "is-closed-loop-disabled" : true, + "l-interfaces" : { + "l-interface" : [ { + "interface-name" : "top-linterface-with-vlan", + "interface-role" : "3W1FAJGSQ", + "v6-wan-link-ip" : "WugWw3N", + "selflink" : "Of4j0pU", + "interface-id" : "eoW", + "macaddr" : "XNbbIy33", + "network-name" : "ZETDv5sGhiS", + "management-option" : "qR3RyCxgEU", + "vlans" : { + "vlan" : [ { + "vlan-interface" : "test-vlan-interface-1", + "vlan-id-inner" : 884, + "vlan-id-outer" : 992, + "speed-value" : "RyFPm", + "speed-units" : "ZrckmLff7b", + "vlan-description" : "zjAeUFgeagpf", + "backdoor-connection" : "gANMvUquB", + "vpn-key" : "l0rV7bb2Sc", + "orchestration-status" : "WVnLpbzIx", + "in-maint" : false, + "prov-status" : "tYMRi6df", + "is-ip-unnumbered" : false + } ] + } + } ] + } + } ] + } + } ] + } +} diff --git a/aai-core/src/test/resources/payloads/resource/cloud-region.json b/aai-core/src/test/resources/payloads/resource/cloud-region.json new file mode 100644 index 00000000..0bbf6398 --- /dev/null +++ b/aai-core/src/test/resources/payloads/resource/cloud-region.json @@ -0,0 +1,4 @@ +{ + "cloud-owner": "cloud-region-owner-with-vip-ipv4", + "cloud-region-id": "cloud-region-id-with-vip-ipv4" +} diff --git a/aai-core/src/test/resources/payloads/resource/entitlement.json b/aai-core/src/test/resources/payloads/resource/entitlement.json new file mode 100644 index 00000000..09afb617 --- /dev/null +++ b/aai-core/src/test/resources/payloads/resource/entitlement.json @@ -0,0 +1,4 @@ +{ + "group-uuid":"g1", + "resource-uuid":"r1" +} diff --git a/aai-core/src/test/resources/payloads/resource/model-element.json b/aai-core/src/test/resources/payloads/resource/model-element.json new file mode 100644 index 00000000..935f1b05 --- /dev/null +++ b/aai-core/src/test/resources/payloads/resource/model-element.json @@ -0,0 +1,230 @@ +{ + "model-element-uuid": "acf8b6cf-e051-4c1b-bcad-b24792f826cf-test1", + "new-data-del-flag": "7hWigbwQCh", + "cardinality": "loWHX7E8X", + "linkage-points": [ + "Ve4JU" + ], + "model-elements": { + "model-element": [ + { + "model-element-uuid": "01b757d5-6468-48d0-a1cd-2aa8310dadab-test1", + "new-data-del-flag": "IXoM0QnE0W", + "cardinality": "THLHKl" + }, + { + "model-element-uuid": "2e5d5696-2221-4bcf-a493-e0ca92e323de-test1", + "new-data-del-flag": "icATJZ7Vbhz", + "cardinality": "tOIz" + } + ] + }, + "model-constraints": { + "model-constraint": [ + { + "model-constraint-uuid": "9f2e872b-000e-4bb9-9398-f308a997dd4f-test1", + "constrained-element-set-uuid-to-replace": "XfAVftTYu", + "constrained-element-sets": { + "constrained-element-set": [ + { + "constrained-element-set-uuid": "103cc6f7-b648-4a3f-b5aa-0ffdac4d4bc5-test1", + "constraint-type": "FLKyNFdqbSSje", + "check-type": "IDLSYTM", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "5c063d38-d83e-4fe5-a721-86296fe39267-test1", + "element-choice-set-name": "EFc5b4k7LN8hF", + "cardinality": "xx8", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "0b7a5aa2-5061-4916-a2c6-5280e67e0a71-test1", + "new-data-del-flag": "x1Lo15W", + "cardinality": "COu" + }, + { + "model-element-uuid": "f0af348b-1701-409f-bb11-e3acc77ad718-test1", + "new-data-del-flag": "eiWkNQEj", + "cardinality": "3aju5XtI" + } + ] + } + }, + { + "element-choice-set-uuid": "2c0888a6-fb6d-4a72-b0a1-3349c90d9e33-test1", + "element-choice-set-name": "Ko4", + "cardinality": "aXjnyYfCRFTDK", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "ea8853be-8473-4f80-8229-9041864e143e-test1", + "new-data-del-flag": "4tirsCs0fjDdS", + "cardinality": "v2hbEn8u" + }, + { + "model-element-uuid": "f1267f37-5aa0-4f4a-ae66-3cf782ff4a9d-test1", + "new-data-del-flag": "mzuWZTlc9f", + "cardinality": "ysBXVL" + } + ] + } + } + ] + } + }, + { + "constrained-element-set-uuid": "a82256df-5bc8-4433-851f-9b09f63432b4-test1", + "constraint-type": "qgnLpj", + "check-type": "zFug3wfyCe5cF", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "3ce79981-c0cc-4210-9dab-89b8866797be-test1", + "element-choice-set-name": "rZ2f7Es", + "cardinality": "H1b", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "52362a88-eb7a-4fe5-a6d5-1ca414cfed64-test1", + "new-data-del-flag": "8cQmvQgeKJz", + "cardinality": "6T7GiwYlJR5" + }, + { + "model-element-uuid": "e9d00d89-a340-4ef1-ab19-63367a5e8642-test1", + "new-data-del-flag": "ec8DWfYeMJdr", + "cardinality": "Bumc8fT7" + } + ] + } + }, + { + "element-choice-set-uuid": "335bac38-9739-4ff7-8743-e186310d86a9-test1", + "element-choice-set-name": "K0MH", + "cardinality": "rL3fH1Oz", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "29244639-38ab-45b2-82b7-b91001ad56da-test1", + "new-data-del-flag": "YZGbB6", + "cardinality": "ushcYd" + }, + { + "model-element-uuid": "e36d3159-bfa7-465a-849f-de9ca6d4f304-test1", + "new-data-del-flag": "ZtzRhZbxv2i", + "cardinality": "NE4m8n5hj" + } + ] + } + } + ] + } + } + ] + } + }, + { + "model-constraint-uuid": "9e74a97c-52a9-43b4-bb9d-144cb5a2216e-test1", + "constrained-element-set-uuid-to-replace": "bZqdarfk6", + "constrained-element-sets": { + "constrained-element-set": [ + { + "constrained-element-set-uuid": "6c4db1da-8860-4445-a0ad-3ae00709e2bb-test1", + "constraint-type": "Xzat2eVcU36g", + "check-type": "3Y5Bi32VkRHFl", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "33dc52b0-3461-4ca6-a195-c3cacc2ab426-test1", + "element-choice-set-name": "2ziwMvQGmanJ", + "cardinality": "7XXcdT5sqsOf", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "c0fb7805-dfc4-4972-9a1c-d9409560f6e3-test1", + "new-data-del-flag": "262Lx", + "cardinality": "0ZaryC" + }, + { + "model-element-uuid": "e868506d-ef7d-4843-9c1b-47712c7c1b77-test1", + "new-data-del-flag": "f7cKUCEbVuj6", + "cardinality": "6LlYciE99" + } + ] + } + }, + { + "element-choice-set-uuid": "aca6b107-ba99-4e10-aef5-ff35a5b25a60-test1", + "element-choice-set-name": "lqfZDs", + "cardinality": "9AwB7", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "527faaf0-f989-47a4-9ffd-4ea16d034be1-test1", + "new-data-del-flag": "mPra14ZfLilOw", + "cardinality": "y6mYr6" + }, + { + "model-element-uuid": "dfd7c245-0a28-494d-b388-faf27481674c-test1", + "new-data-del-flag": "muGR", + "cardinality": "TUj4Z" + } + ] + } + } + ] + } + }, + { + "constrained-element-set-uuid": "17999338-a062-4447-b8c3-b27228255ede-test1", + "constraint-type": "WhTbdWCLyA", + "check-type": "tN02MBeB", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "633c6757-2270-48fb-bff7-61145e6c943f-test1", + "element-choice-set-name": "Ith1PEe6", + "cardinality": "8sta", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "827c40a9-cabe-460a-b537-2f117ca62db5-test1", + "new-data-del-flag": "fS65rXWQY", + "cardinality": "Kq42Z8GzCh" + }, + { + "model-element-uuid": "c107a4bd-59e4-4249-bbc3-a006645dcb01-test1", + "new-data-del-flag": "EtgTeJdo19", + "cardinality": "tvzpgg" + } + ] + } + }, + { + "element-choice-set-uuid": "930260d8-4cfd-4494-ba2c-d619c143a390-test1", + "element-choice-set-name": "ugDc0", + "cardinality": "K8MXjV", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "f17f9eea-d421-4e8a-8628-32a4b56507ef-test1", + "new-data-del-flag": "rjAbq7gyZWe", + "cardinality": "VbDCFB9" + }, + { + "model-element-uuid": "ee1d800e-46c1-4bb0-8664-f257850ffff9-test1", + "new-data-del-flag": "YontPXK4sj4s", + "cardinality": "UQnNPld4sE" + } + ] + } + } + ] + } + } + ] + } + } + ] + } +} diff --git a/aai-core/src/test/resources/payloads/resource/model.json b/aai-core/src/test/resources/payloads/resource/model.json new file mode 100644 index 00000000..a86a1de8 --- /dev/null +++ b/aai-core/src/test/resources/payloads/resource/model.json @@ -0,0 +1,975 @@ +{ + "model-invariant-id": "24c04fc5-f3f8-43ec-8792-c6f940638676-test1", + "model-type": "woZ4dpF3TM", + "model-vers": { + "model-ver": [ + { + "model-version-id": "0c4c59f0-9864-43ca-b0c2-ca38746b72a5-test1", + "model-name": "vzZn3Q3h", + "model-version": "RcN2FIwUF", + "distribution-status": "qcCHkye", + "model-description": "qcPB4hOig9", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "0dc2b8b6-af8d-4213-970b-7861a603fc86-test1", + "new-data-del-flag": "OzhypC", + "cardinality": "vNpFfHn", + "linkage-points": [ + "BTDVw7pA" + ], + "model-elements": { + "model-element": [ + { + "model-element-uuid": "0ff7bfc5-e42b-474d-b728-cfdc08310971-test1", + "new-data-del-flag": "v54vhcTX", + "cardinality": "uHLsCw" + }, + { + "model-element-uuid": "4fb1b036-9963-467e-93fe-c6e499859b2e-test1", + "new-data-del-flag": "UAJAjOCe9dIiW", + "cardinality": "8PhfKI" + } + ] + }, + "model-constraints": { + "model-constraint": [ + { + "model-constraint-uuid": "782ba24a-28ab-4fd0-8e69-da10cc5373f3-test1", + "constrained-element-set-uuid-to-replace": "8vcq", + "constrained-element-sets": { + "constrained-element-set": [ + { + "constrained-element-set-uuid": "a33e65c3-1198-4d4c-9799-2b521e4c4212-test1", + "constraint-type": "4jqozTvJSD", + "check-type": "J9aM", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "7df27a94-06c8-46ef-9fc2-5900d8cffbb0-test1", + "element-choice-set-name": "wjNT", + "cardinality": "XSPmZH", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "fcf1450b-cf5c-414a-99c0-2bd7ca247997-test1", + "new-data-del-flag": "uhwWkaDw", + "cardinality": "jeBU9v" + }, + { + "model-element-uuid": "85bfca5f-03ac-4653-a3b4-bdfad8dd1c13-test1", + "new-data-del-flag": "L2BQe2kyA", + "cardinality": "asciE2y7RWGVa" + } + ] + } + }, + { + "element-choice-set-uuid": "d20040e2-0417-4a2d-978e-e6c9f353a0c5-test1", + "element-choice-set-name": "x7vEDj5", + "cardinality": "A6f2Us", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "5cdcbb91-22eb-4c12-9a54-b8c3ff5aa591-test1", + "new-data-del-flag": "BCo", + "cardinality": "FejO1GRl" + }, + { + "model-element-uuid": "7a401382-7d45-40f9-8fe7-236629273226-test1", + "new-data-del-flag": "zFj", + "cardinality": "9DzyB7u" + } + ] + } + } + ] + } + }, + { + "constrained-element-set-uuid": "2f7a375a-135d-461b-b806-e7cd636506f4-test1", + "constraint-type": "Toy", + "check-type": "uYEWZon81Wa", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "8aab42ee-561f-4506-ab66-6432442193f8-test1", + "element-choice-set-name": "RpJJn1eRQL", + "cardinality": "q0XXZ52", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "2a35ad40-02ef-4947-b20c-94a90440ffc7-test1", + "new-data-del-flag": "gXHt5O5XyRKb", + "cardinality": "idg0cH" + }, + { + "model-element-uuid": "7aae6c34-086e-477b-845a-01cedc2a4e25-test1", + "new-data-del-flag": "Zwj", + "cardinality": "3vkT" + } + ] + } + }, + { + "element-choice-set-uuid": "f42dcd25-aa82-401f-b987-5d0f46d6b5d6-test1", + "element-choice-set-name": "Cuon", + "cardinality": "cfxfo3MAF", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "2f9f4c5c-216c-45c0-913b-5513faa6f887-test1", + "new-data-del-flag": "2ZTs", + "cardinality": "zki" + }, + { + "model-element-uuid": "6abd9eb0-59b2-45d1-bc31-51913bc9f54b-test1", + "new-data-del-flag": "9cQkkA", + "cardinality": "NGY7CgvUQDN" + } + ] + } + } + ] + } + } + ] + } + }, + { + "model-constraint-uuid": "8544de93-b647-4d79-aa55-a3ebe01664e7-test1", + "constrained-element-set-uuid-to-replace": "phbhKDPCcUjK", + "constrained-element-sets": { + "constrained-element-set": [ + { + "constrained-element-set-uuid": "61624b66-e059-49c6-a97c-06ca4643e259-test1", + "constraint-type": "gp0nB63dH", + "check-type": "NFnVJKceCMc", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "f85f1ee8-d28f-4128-83d8-02c2e07f9e27-test1", + "element-choice-set-name": "8noi", + "cardinality": "mTFoGk", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "1e15718d-17e8-4a34-852e-2edede549b63-test1", + "new-data-del-flag": "f3p1f", + "cardinality": "c0Z6zG0iKX" + }, + { + "model-element-uuid": "4ad51c91-1e90-4683-b9ea-017cf0bc528e-test1", + "new-data-del-flag": "05r47Aldegi", + "cardinality": "aoF" + } + ] + } + }, + { + "element-choice-set-uuid": "fb2c7824-fc87-4fe9-93c6-10586a59384e-test1", + "element-choice-set-name": "EIjKr0w3tJ", + "cardinality": "qlw6EFFF", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "2395bed7-399d-41cd-81af-e5002854bc69-test1", + "new-data-del-flag": "Uj2", + "cardinality": "eLHBGqv7wz5z" + }, + { + "model-element-uuid": "77840aeb-0868-49c1-a97d-6ded16115174-test1", + "new-data-del-flag": "rOR", + "cardinality": "ddXm59kMQ01y" + } + ] + } + } + ] + } + }, + { + "constrained-element-set-uuid": "4f1f30ee-5bd5-4f19-b11d-23ebf0fcd569-test1", + "constraint-type": "Ul7rn0Gyh", + "check-type": "5KpT6x", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "d2b9a3f5-29de-45ba-ad5a-184e0635607a-test1", + "element-choice-set-name": "OWFEeT", + "cardinality": "g2wvznpf", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "93d0b10b-529a-4ad4-88fa-afc7273ec538-test1", + "new-data-del-flag": "BHqDTu", + "cardinality": "bUZd3Zj4b" + }, + { + "model-element-uuid": "fd6548f8-211a-4194-a78e-857efc443180-test1", + "new-data-del-flag": "ygDuebv", + "cardinality": "UZx1v0HH7I" + } + ] + } + }, + { + "element-choice-set-uuid": "f393b086-40b6-47d9-b28a-b830d5d7f896-test1", + "element-choice-set-name": "dxt8afBT", + "cardinality": "L3mtZIH342JVw", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "d802155e-8e16-4b9d-986a-d0f490d83e56-test1", + "new-data-del-flag": "cPapfw", + "cardinality": "4O3aiKf" + }, + { + "model-element-uuid": "64cf1800-77b7-4c1d-80b2-38fc156769a6-test1", + "new-data-del-flag": "T2dc7t3", + "cardinality": "LTrGUfoB7imS" + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "model-element-uuid": "1db3d04c-92c6-4100-b851-16a0a2318909-test1", + "new-data-del-flag": "9Gc", + "cardinality": "vtJk", + "linkage-points": [ + "NKC5OiZl" + ], + "model-elements": { + "model-element": [ + { + "model-element-uuid": "16b90f9d-d2ed-46e8-8a0d-f2907ecf723d-test1", + "new-data-del-flag": "jcjL", + "cardinality": "qxX" + }, + { + "model-element-uuid": "46afb085-7025-4a35-99e3-6170dc98b74b-test1", + "new-data-del-flag": "tXgrF6T4HrirE", + "cardinality": "55waV3oUI" + } + ] + }, + "model-constraints": { + "model-constraint": [ + { + "model-constraint-uuid": "6f6fbf96-c9a7-4393-9e81-284d194ba6a3-test1", + "constrained-element-set-uuid-to-replace": "HF81PuSuM", + "constrained-element-sets": { + "constrained-element-set": [ + { + "constrained-element-set-uuid": "cf2d2ff1-1ffc-4ad6-b3ce-8729c3352637-test1", + "constraint-type": "XfD", + "check-type": "mVERn7luqFc", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "85fb8953-f86d-4d58-8ca2-3169cba074c6-test1", + "element-choice-set-name": "4s6Jf", + "cardinality": "KL8eVh9xZ", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "7b1fd5b5-b633-4ed6-a9e8-9c3430eaaae0-test1", + "new-data-del-flag": "uNbESfr", + "cardinality": "aEj2c5UXN2qW" + }, + { + "model-element-uuid": "c67a3856-3812-4c16-abb3-484fe68ba65e-test1", + "new-data-del-flag": "cg1GbGyps", + "cardinality": "cCPBuauJ" + } + ] + } + }, + { + "element-choice-set-uuid": "4748a324-a8aa-420a-9f48-0fd0b7418a1a-test1", + "element-choice-set-name": "U3JuW0tx", + "cardinality": "4jpXRS43G", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "daad8caa-dbfc-487a-91d4-a93021a86e0c-test1", + "new-data-del-flag": "ZoRQyflmIqEaA", + "cardinality": "Mu7PzxNg8cta" + }, + { + "model-element-uuid": "e5a640f1-1203-410c-8665-0ee325179368-test1", + "new-data-del-flag": "thsF0L", + "cardinality": "fViD" + } + ] + } + } + ] + } + }, + { + "constrained-element-set-uuid": "5d1b2701-d719-4eb5-b5bc-355f99042648-test1", + "constraint-type": "4wPy2Xd", + "check-type": "sDuGfZji", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "d01f1c5b-5ba1-4c21-b80d-901867a1d810-test1", + "element-choice-set-name": "FdrVe6o", + "cardinality": "F1MXs1fET0jr3", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "6e059bfe-5386-4491-8e84-b1b6dd8b5333-test1", + "new-data-del-flag": "DfodMIT72h7", + "cardinality": "KvRbLIJFL" + }, + { + "model-element-uuid": "ea73886a-ff64-4d3c-9b17-5ae5b2196dea-test1", + "new-data-del-flag": "n9PnoK5", + "cardinality": "0E3fM6" + } + ] + } + }, + { + "element-choice-set-uuid": "abb55d08-28b6-48d8-b19e-91b12c096649-test1", + "element-choice-set-name": "MRFYeF7", + "cardinality": "b64jIhgbYH7", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "c449a692-bd7d-4d86-b46e-1c417b17099f-test1", + "new-data-del-flag": "ApwuLwUkkw", + "cardinality": "m23c6lsF" + }, + { + "model-element-uuid": "7cb770d9-55d8-45d2-8b9b-abdff7a2c88b-test1", + "new-data-del-flag": "MeSjvno", + "cardinality": "lGFfcOOl19" + } + ] + } + } + ] + } + } + ] + } + }, + { + "model-constraint-uuid": "ce9e9365-1fec-4c29-8201-c4417ee2ea1d-test1", + "constrained-element-set-uuid-to-replace": "Buq56Km4W9BD", + "constrained-element-sets": { + "constrained-element-set": [ + { + "constrained-element-set-uuid": "3dcea521-a227-46f3-bd4f-ef1fcff0755e-test1", + "constraint-type": "WZr", + "check-type": "pxJXuyaXvsaQy", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "19dc8b4a-c58b-4ff8-b507-877c6521d91a-test1", + "element-choice-set-name": "af5CO7sD5TWwz", + "cardinality": "uGwotewgnmls", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "5d476750-ddc3-4822-b629-5fba93445ed9-test1", + "new-data-del-flag": "mMjS6OflV3c", + "cardinality": "Gidw5" + }, + { + "model-element-uuid": "d4d4f1f6-ad60-4a94-b076-eb36db6fb362-test1", + "new-data-del-flag": "kWLrcR", + "cardinality": "AU6llmk" + } + ] + } + }, + { + "element-choice-set-uuid": "d6616e1a-3de5-4981-a216-805bdd97d65e-test1", + "element-choice-set-name": "9w67AaiJNt0", + "cardinality": "kKax01oqb", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "bb11c9c1-5013-4b51-9a06-9729addfd4af-test1", + "new-data-del-flag": "ANM8TN0a", + "cardinality": "UPtA8wc4m" + }, + { + "model-element-uuid": "71b323c0-1829-414e-85f6-99f4b5835e44-test1", + "new-data-del-flag": "okC9", + "cardinality": "1KP3eU5j8" + } + ] + } + } + ] + } + }, + { + "constrained-element-set-uuid": "77d1cc2d-6e94-4a4f-a7ec-f725605f18d3-test1", + "constraint-type": "inJa", + "check-type": "JkoIos3V", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "9893bb02-e422-4810-bccc-a594b0489ded-test1", + "element-choice-set-name": "ZIync", + "cardinality": "WZfSZe", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "b0aaa08d-a7fe-44ae-a6d8-d21645831a23-test1", + "new-data-del-flag": "RdwsDmBBz", + "cardinality": "Ry6V3zZtLOS" + }, + { + "model-element-uuid": "a2670e8e-f57e-4c0e-9522-6d16b4e2cf18-test1", + "new-data-del-flag": "aCECwDjNyauTZ", + "cardinality": "a28MCzMm24JBI" + } + ] + } + }, + { + "element-choice-set-uuid": "321ccc75-61ae-4358-af89-53809a28f956-test1", + "element-choice-set-name": "HjNWjs", + "cardinality": "bxRIxMP", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "41965df8-b42d-47ba-8bf6-cade35804311-test1", + "new-data-del-flag": "CPLVd", + "cardinality": "4Ij4hep2" + }, + { + "model-element-uuid": "db7ee384-420e-44fb-a1ca-809f94add6b8-test1", + "new-data-del-flag": "Cj5GVv", + "cardinality": "1LSdRvvzBBfa" + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + }, + "metadata": { + "metadatum": [ + { + "metaname": "8b3496f1-822e-4acf-b1fc-d07a494d3a86-test1", + "metaval": "gZwqNxIDsw" + }, + { + "metaname": "d9a50737-f3df-4156-881d-e3875031b413-test1", + "metaval": "qMugMK" + } + ] + } + }, + { + "model-version-id": "1e6ec4df-ad66-40bc-8f1d-ba40c835e77e-test1", + "model-name": "wStuf", + "model-version": "HAm", + "distribution-status": "zsKxpTc5YTW1", + "model-description": "zxHpALNUvX8V", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "b1ac6004-59bd-4372-ab16-f327d04d647e-test1", + "new-data-del-flag": "j58MXR", + "cardinality": "9Xr0gNa", + "linkage-points": [ + "LmE7mpec2" + ], + "model-elements": { + "model-element": [ + { + "model-element-uuid": "38295729-dc3b-4b7b-87e3-446513a802df-test1", + "new-data-del-flag": "R5KeFH8", + "cardinality": "9wkk9Z" + }, + { + "model-element-uuid": "b1ac08c3-3047-4637-8796-6b5e43bbad19-test1", + "new-data-del-flag": "KOS9kMuahku", + "cardinality": "F6A" + } + ] + }, + "model-constraints": { + "model-constraint": [ + { + "model-constraint-uuid": "0c7f45c8-2552-400a-b029-e20cddda592b-test1", + "constrained-element-set-uuid-to-replace": "105ZUJ", + "constrained-element-sets": { + "constrained-element-set": [ + { + "constrained-element-set-uuid": "162ea223-ae49-4e6d-ba30-8215c433a7e2-test1", + "constraint-type": "GAq", + "check-type": "ippNik", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "5caa493c-e804-4c28-aad6-3389a1801e29-test1", + "element-choice-set-name": "oLPlXWcCL", + "cardinality": "ns6", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "ff8f0de4-220f-4f7f-8447-07c67ed8a109-test1", + "new-data-del-flag": "TlLVzdU5Mz", + "cardinality": "wQI" + }, + { + "model-element-uuid": "fd6018bc-b3ce-4073-b494-848c06aaef83-test1", + "new-data-del-flag": "ZIkOtmdu8ij", + "cardinality": "XfOsai" + } + ] + } + }, + { + "element-choice-set-uuid": "45d079e2-94f8-4c75-9e58-fca00da8e032-test1", + "element-choice-set-name": "nfOh9SvgG", + "cardinality": "j5u1OHFt", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "3edbf250-7039-47cd-b31d-019e5639006b-test1", + "new-data-del-flag": "Qo5M8AB", + "cardinality": "crDs4E" + }, + { + "model-element-uuid": "566c492a-4b8d-4393-9634-5deb36114390-test1", + "new-data-del-flag": "tSl", + "cardinality": "xZK7oAuI1" + } + ] + } + } + ] + } + }, + { + "constrained-element-set-uuid": "6efd9e99-bca6-4f3b-a7dc-38ad373c38e9-test1", + "constraint-type": "v3RYRkCdTm", + "check-type": "adGnhMq6P4", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "09d59684-e8e5-4e08-93af-b2a65d0328e6-test1", + "element-choice-set-name": "Q1rPa", + "cardinality": "ENpTrUR", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "904654a2-4d7d-4d07-af26-ddb881dd05d7-test1", + "new-data-del-flag": "76D6azxVm1XR9", + "cardinality": "R0Zb34f" + }, + { + "model-element-uuid": "898cfb56-6e36-4b03-8967-9384d06b3a3e-test1", + "new-data-del-flag": "SJtXdr4", + "cardinality": "vG4JrjQ8" + } + ] + } + }, + { + "element-choice-set-uuid": "9ac87d60-51c5-4dd6-bb1e-1b8dd234b5a9-test1", + "element-choice-set-name": "azv", + "cardinality": "oJfnKsDO5k", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "6ec8304f-8159-4344-b06d-faf1001fd275-test1", + "new-data-del-flag": "3s5zQjf8Vwl4", + "cardinality": "6SogRPhZX38Ol" + }, + { + "model-element-uuid": "cfd9b055-3d8a-4429-9ea6-078a2270e469-test1", + "new-data-del-flag": "VaW81J59tqiY", + "cardinality": "t1mNuU7JnNc7L" + } + ] + } + } + ] + } + } + ] + } + }, + { + "model-constraint-uuid": "fe9d4b0d-dc65-4440-a10f-5237f135255c-test1", + "constrained-element-set-uuid-to-replace": "pWv26", + "constrained-element-sets": { + "constrained-element-set": [ + { + "constrained-element-set-uuid": "ea1473a3-e72d-4838-b8d8-7c8e86e0b3c8-test1", + "constraint-type": "Mdbb0G5nLxcx3", + "check-type": "a8rlES", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "86726d80-74d6-4b7e-9532-65ebb76133ef-test1", + "element-choice-set-name": "fBm0", + "cardinality": "csPsKpgV", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "c0df13d1-a8be-4bc0-a572-44ca28d35d62-test1", + "new-data-del-flag": "k9x8eFMP", + "cardinality": "5xHWzWretpyAN" + }, + { + "model-element-uuid": "ef4f9a86-a1b8-48ef-a7aa-ff56a1879ef7-test1", + "new-data-del-flag": "JdujO3QQr4", + "cardinality": "N6pvsIK" + } + ] + } + }, + { + "element-choice-set-uuid": "07f1ae12-8e40-4c42-bb8c-e5931f82be84-test1", + "element-choice-set-name": "by4K", + "cardinality": "HfJt7", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "aed78a3d-de9e-4825-88b3-8251a822e87c-test1", + "new-data-del-flag": "NbAWo0r1su", + "cardinality": "GIHSc" + }, + { + "model-element-uuid": "451ef346-a43e-4d9c-ae94-4d14f12b7776-test1", + "new-data-del-flag": "o6GI", + "cardinality": "Hbbm3HRFeXw8U" + } + ] + } + } + ] + } + }, + { + "constrained-element-set-uuid": "1b3d0f60-b438-4789-b711-5d48c211e9b3-test1", + "constraint-type": "G7HBqSqa8", + "check-type": "Rky", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "c47b3c18-912b-4781-82a9-961702e58712-test1", + "element-choice-set-name": "ntxJ1ETx96", + "cardinality": "6B1XDdERKUk0f", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "d451967f-5cb9-4aba-8595-938d44bed081-test1", + "new-data-del-flag": "pwHvYjtFEvmn", + "cardinality": "X6jiiniZ24e3" + }, + { + "model-element-uuid": "0f6196d6-b3b7-451a-a3d8-2a0a9bf401b7-test1", + "new-data-del-flag": "YFY4Dmyr", + "cardinality": "CMF05rTle1" + } + ] + } + }, + { + "element-choice-set-uuid": "927a4c5d-c06f-474c-bc39-b1bf8edbd5a9-test1", + "element-choice-set-name": "C19", + "cardinality": "7xCo", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "b839b84d-4508-4aa6-8c32-0566a25d62d1-test1", + "new-data-del-flag": "QdvVPKk", + "cardinality": "QWO7FG" + }, + { + "model-element-uuid": "20df13a4-aad9-46ed-8c40-d2c9ee25c0c0-test1", + "new-data-del-flag": "aFu39uCq", + "cardinality": "wFwAw3L3wT2x5" + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "model-element-uuid": "c198c7e7-162f-4b36-ab18-1ea652940569-test1", + "new-data-del-flag": "c9VM1nU9", + "cardinality": "na6ev", + "linkage-points": [ + "Qn71", + "VqVquEM" + ], + "model-elements": { + "model-element": [ + { + "model-element-uuid": "5a3d5001-ed82-4586-9f8e-f4754c5a7a18-test1", + "new-data-del-flag": "x5unCqf", + "cardinality": "SelKZSH" + }, + { + "model-element-uuid": "b150a826-8d8e-4e76-8661-6cbc67fd0d9a-test1", + "new-data-del-flag": "9LfZWv", + "cardinality": "uMtY5vRkmCnw" + } + ] + }, + "model-constraints": { + "model-constraint": [ + { + "model-constraint-uuid": "43871728-3816-470f-9b36-4097731910a4-test1", + "constrained-element-set-uuid-to-replace": "R8Uhk", + "constrained-element-sets": { + "constrained-element-set": [ + { + "constrained-element-set-uuid": "0fd99298-8079-4a3c-bbed-dce0ceadf790-test1", + "constraint-type": "JFVkmI9ilV", + "check-type": "9eqnm", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "22a978b9-4dcc-4c7d-b88a-6bdbab97dd7c-test1", + "element-choice-set-name": "4fHNNV", + "cardinality": "VBAiH", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "d9bef0c1-07c9-4251-b621-196be3b7870e-test1", + "new-data-del-flag": "FQen9U2BTGx", + "cardinality": "ohd" + }, + { + "model-element-uuid": "60d8b814-8035-4010-8d46-9db2e5962f17-test1", + "new-data-del-flag": "2aJgwjV3UZv", + "cardinality": "WMb" + } + ] + } + }, + { + "element-choice-set-uuid": "a5b753eb-162e-4bea-8185-43b7e96c0770-test1", + "element-choice-set-name": "k9Ud", + "cardinality": "VAL51", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "1ecfe4f4-6696-4df4-8b93-b2b3fa39c377-test1", + "new-data-del-flag": "SRFYVMGe", + "cardinality": "muxuy0DZBBW" + }, + { + "model-element-uuid": "96acb4b2-f178-4119-8c32-6c5901896417-test1", + "new-data-del-flag": "wbzd", + "cardinality": "M0Y7Meota" + } + ] + } + } + ] + } + }, + { + "constrained-element-set-uuid": "b22dc84b-5568-4b7d-9b58-0bc90c969619-test1", + "constraint-type": "waPRf1NGHeFy", + "check-type": "YziABbwA4", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "fb4d5b28-2083-4bb6-a87d-e53eadd14d54-test1", + "element-choice-set-name": "VnX7QOx", + "cardinality": "qk4aMYBkw", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "1b5481f2-66c9-4cd4-89ee-492e333570fe-test1", + "new-data-del-flag": "ba6QIyym", + "cardinality": "zUJ9gpkRq" + }, + { + "model-element-uuid": "c9918ba3-dcb3-46e8-870f-316251f459a3-test1", + "new-data-del-flag": "X2MIS2y", + "cardinality": "u3xIyaL" + } + ] + } + }, + { + "element-choice-set-uuid": "f5a14c3b-6536-4803-9660-4a2f2263dfdd-test1", + "element-choice-set-name": "KiVnNej1flt", + "cardinality": "AwImrctM5", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "e5e3b7db-7336-498b-8eca-f43f979dda68-test1", + "new-data-del-flag": "v3JnIH7JEK", + "cardinality": "pzypSipEOA" + }, + { + "model-element-uuid": "24426103-516b-4634-83f6-0b02db4d10ed-test1", + "new-data-del-flag": "lNx", + "cardinality": "OFMiiE1w4K" + } + ] + } + } + ] + } + } + ] + } + }, + { + "model-constraint-uuid": "310f083b-2d76-4e2d-ab82-b4c6b2a49637-test1", + "constrained-element-set-uuid-to-replace": "70UQQ", + "constrained-element-sets": { + "constrained-element-set": [ + { + "constrained-element-set-uuid": "f6b24791-facd-41d8-8b4e-b76d750ef3e8-test1", + "constraint-type": "eBTDI1Xx", + "check-type": "uyscxXaNEt", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "efc328ed-3302-4808-b25a-adbbe88af7d9-test1", + "element-choice-set-name": "HwpVVTGb6e", + "cardinality": "dZ78oR", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "1f20c582-952d-4489-a45b-b7b898062bc4-test1", + "new-data-del-flag": "Vq8f3STu8ez", + "cardinality": "5lN" + }, + { + "model-element-uuid": "77f61b0a-ecf4-43ed-84b8-478372922557-test1", + "new-data-del-flag": "OrbNIIvUvTQ", + "cardinality": "CwT1hp9uUn" + } + ] + } + }, + { + "element-choice-set-uuid": "7561f91e-5d71-4871-b745-5974a29fa4f0-test1", + "element-choice-set-name": "JyMxtTdSzEYI", + "cardinality": "CU5", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "7857bb38-b373-4f32-bfed-fb698b38f288-test1", + "new-data-del-flag": "qGYsqE", + "cardinality": "m1wtW502" + }, + { + "model-element-uuid": "27097500-1e6a-4692-bcfc-8c5751094416-test1", + "new-data-del-flag": "e3LD9ESy1h2we", + "cardinality": "a0jEiwQq" + } + ] + } + } + ] + } + }, + { + "constrained-element-set-uuid": "a63f212b-0608-4676-a801-eae9704ca6f8-test1", + "constraint-type": "1s642QAY3emE", + "check-type": "3sR23Vt", + "element-choice-sets": { + "element-choice-set": [ + { + "element-choice-set-uuid": "e6f1f3eb-61c5-4e00-877b-253d41dc8bc1-test1", + "element-choice-set-name": "EBhZUZSbs", + "cardinality": "1LrK8RM4o33LD", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "323c6b90-7aba-41ad-8313-5a4a2b2c56ae-test1", + "new-data-del-flag": "R3oKjC8hz87", + "cardinality": "LT8Phj" + }, + { + "model-element-uuid": "6a4f5cbe-6251-402e-aa0c-d42284acf4f3-test1", + "new-data-del-flag": "XeIPIYLqyIL", + "cardinality": "pGK" + } + ] + } + }, + { + "element-choice-set-uuid": "4937bd81-08f1-4cb7-b3bd-9c9db142a791-test1", + "element-choice-set-name": "VXcx", + "cardinality": "hIKH", + "model-elements": { + "model-element": [ + { + "model-element-uuid": "db4ddcd0-6a57-47af-b72d-f10e806bd779-test1", + "new-data-del-flag": "2lsYwLYukGh43", + "cardinality": "zhcfiBQ" + }, + { + "model-element-uuid": "7f0823ec-87f7-4f0a-b6ed-d19571917f3d-test1", + "new-data-del-flag": "8xUASuYyIym", + "cardinality": "ktmQThTtgu" + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + }, + "metadata": { + "metadatum": [ + { + "metaname": "a4f78e88-e09f-4ca1-b26a-093141044aea-test1", + "metaval": "kfsTQsxZk" + }, + { + "metaname": "1d153c8b-ba38-4566-876b-53795a71b8f9-test1", + "metaval": "xr0Z" + } + ] + } + } + ] + } +} diff --git a/aai-core/src/test/resources/payloads/resource/vip-ipv4-address-list.json b/aai-core/src/test/resources/payloads/resource/vip-ipv4-address-list.json new file mode 100644 index 00000000..4978d2af --- /dev/null +++ b/aai-core/src/test/resources/payloads/resource/vip-ipv4-address-list.json @@ -0,0 +1,6 @@ +{ + "vip-ipv4-address": "vip-ipv4-address-list-1", + "vip-ipv4-prefix-length": 3333, + "vlan-id-inner": 3333, + "vlan-id-outer": 3333 +} diff --git a/aai-core/src/test/resources/payloads/resource/vnf.json b/aai-core/src/test/resources/payloads/resource/vnf.json new file mode 100644 index 00000000..e3e7a35f --- /dev/null +++ b/aai-core/src/test/resources/payloads/resource/vnf.json @@ -0,0 +1,4 @@ +{ + "vnf-id":"vnf1", + "vnf-type":"someval" +} |