aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org')
-rw-r--r--src/test/java/org/onap/crud/parser/util/EdgePayloadUtilTest.java110
-rw-r--r--src/test/java/org/onap/crud/service/AaiResourceServiceTest.java3
-rw-r--r--src/test/java/org/onap/crud/service/BulkPayloadTest.java2
-rw-r--r--src/test/java/org/onap/crud/service/CrudRestServiceTest.java155
-rw-r--r--src/test/java/org/onap/crud/util/CrudServiceUtilTest.java2
-rw-r--r--src/test/java/org/onap/schema/RelationshipSchemaTest.java14
-rw-r--r--src/test/java/org/onap/schema/validation/MultiplicityValidatorTest.java159
7 files changed, 365 insertions, 80 deletions
diff --git a/src/test/java/org/onap/crud/parser/util/EdgePayloadUtilTest.java b/src/test/java/org/onap/crud/parser/util/EdgePayloadUtilTest.java
new file mode 100644
index 0000000..f5baae8
--- /dev/null
+++ b/src/test/java/org/onap/crud/parser/util/EdgePayloadUtilTest.java
@@ -0,0 +1,110 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017-2018 Amdocs
+ * ================================================================================
+ * 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.crud.parser.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Assert;
+import org.junit.Test;
+import org.onap.crud.entity.Edge;
+import org.onap.crud.entity.Vertex;
+import org.onap.crud.exception.CrudException;
+
+public class EdgePayloadUtilTest {
+
+ @Test
+ public void testGetVertexNodeType() throws CrudException {
+ Assert.assertEquals("vserver", EdgePayloadUtil
+ .getVertexNodeType("services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811"));
+ }
+
+ @Test
+ public void testGetVertexNodeId() throws CrudException {
+ Assert.assertEquals("50bdab41-ad1c-4d00-952c-a0aa5d827811",
+ EdgePayloadUtil.getVertexNodeId("services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811"));
+ }
+
+ @Test
+ public void testGenerateEdgeKey() throws CrudException {
+ Assert.assertEquals("vserver:pserver:tosca.relationships.HostedOn",
+ EdgePayloadUtil.generateEdgeKey("services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811",
+ "services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908",
+ "tosca.relationships.HostedOn"));
+ }
+
+ @Test
+ public void testKeyGenerationEnforcesSourceAndTargetOrder() throws Exception {
+ String generateEdgeKey1 = EdgePayloadUtil.generateEdgeKey(
+ "services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811",
+ "services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908", "tosca.relationships.HostedOn");
+
+ String generateEdgeKey2 = EdgePayloadUtil.generateEdgeKey(
+ "services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908",
+ "services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811", "tosca.relationships.HostedOn");
+
+ Assert.assertNotEquals(generateEdgeKey1, generateEdgeKey2);
+ }
+
+
+ @Test
+ public void testGetBuilderFromEdgePayload() throws CrudException {
+ Edge.Builder builder = EdgePayloadUtil.getBuilderFromEdgePayload(
+ "services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811",
+ "services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908", "tosca.relationships.HostedOn");
+
+ Edge edge = builder.build();
+ Assert.assertEquals("tosca.relationships.HostedOn", edge.getType());
+ Assert.assertEquals("vserver", edge.getSource().getType());
+ Assert.assertEquals("50bdab41-ad1c-4d00-952c-a0aa5d827811", edge.getSource().getId().get());
+ Assert.assertEquals("pserver", edge.getTarget().getType());
+ Assert.assertEquals("1d326bc7-b985-492b-9604-0d5d1f06f908", edge.getTarget().getId().get());
+ }
+
+ @Test
+ public void tesGetBuilderFromEdge() throws CrudException {
+ Edge edge = createEdge("vserver", "pserver");
+
+ Assert.assertNotNull(edge);
+ Assert.assertNotNull(EdgePayloadUtil.getBuilderFromEdge(edge));
+ }
+
+ @Test
+ public void testFilterEdgesByRelatedVertexAndType() throws CrudException {
+ List<Edge> edges = new ArrayList<>();
+ edges.add(createEdge("vserver", "pserver"));
+ edges.add(createEdge("vce", "pserver"));
+ edges.add(createEdge("snapshot", "pserver"));
+ edges.add(createEdge("vserver", "pserver"));
+
+ List<Edge> filteredEdges =
+ EdgePayloadUtil.filterEdgesByRelatedVertexAndType("vserver", "tosca.relationships.HostedOn", edges);
+
+ Assert.assertNotNull(filteredEdges);
+ Assert.assertEquals(2, filteredEdges.size());
+ }
+
+ private Edge createEdge(String sourceVertexType, String targetVertexType) {
+ return new Edge.Builder("tosca.relationships.HostedOn").id("test")
+ .source(new Vertex.Builder(sourceVertexType).id("50bdab41-ad1c-4d00-952c-a0aa5d827811").build())
+ .target(new Vertex.Builder(targetVertexType).id("1d326bc7-b985-492b-9604-0d5d1f06f908").build())
+ .build();
+ }
+}
diff --git a/src/test/java/org/onap/crud/service/AaiResourceServiceTest.java b/src/test/java/org/onap/crud/service/AaiResourceServiceTest.java
index 5eb8a68..c23f3ac 100644
--- a/src/test/java/org/onap/crud/service/AaiResourceServiceTest.java
+++ b/src/test/java/org/onap/crud/service/AaiResourceServiceTest.java
@@ -33,8 +33,7 @@ import org.onap.aai.serialization.db.EdgeRule;
import org.onap.aai.serialization.db.EdgeRules;
import org.onap.aai.serialization.db.EdgeType;
import org.onap.crud.exception.CrudException;
-import org.onap.crud.service.EdgePayload;
-
+import org.onap.crud.parser.EdgePayload;
import com.google.gson.JsonElement;
public class AaiResourceServiceTest {
diff --git a/src/test/java/org/onap/crud/service/BulkPayloadTest.java b/src/test/java/org/onap/crud/service/BulkPayloadTest.java
index 89c2269..c768339 100644
--- a/src/test/java/org/onap/crud/service/BulkPayloadTest.java
+++ b/src/test/java/org/onap/crud/service/BulkPayloadTest.java
@@ -25,7 +25,7 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import org.junit.Test;
-
+import org.onap.crud.parser.BulkPayload;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
diff --git a/src/test/java/org/onap/crud/service/CrudRestServiceTest.java b/src/test/java/org/onap/crud/service/CrudRestServiceTest.java
index 68c876c..ddf3847 100644
--- a/src/test/java/org/onap/crud/service/CrudRestServiceTest.java
+++ b/src/test/java/org/onap/crud/service/CrudRestServiceTest.java
@@ -36,7 +36,6 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.Mockito;
import org.onap.crud.exception.CrudException;
-import org.onap.crud.service.TestDao;
import org.onap.crud.service.util.TestHeaders;
import org.onap.crud.service.util.TestRequest;
import org.onap.crud.service.util.TestUriInfo;
@@ -50,36 +49,36 @@ public class CrudRestServiceTest {
"\"properties\": {" +
"\"fqdn\": \"myhost.onap.com\"," +
"\"hostname\": \"myhost\" } }";
-
+
private final String postVertexPayload = "{" +
"\"type\": \"pserver\"," +
"\"properties\": {" +
"\"fqdn\": \"myhost.onap.com\"," +
"\"hostname\": \"myhost\" } }";
-
+
private final String postMissingPropVertexPayload = "{" +
"\"type\": \"pserver\"," +
"\"properties\": {" +
"\"fqdn\": \"myhost.onap.com\"," +
"\"equip-type\": \"box\" } }";
-
+
private final String postEdgePayload = "{" +
"\"type\": \"tosca.relationships.HostedOn\"," +
- "\"source\": \"services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
- "\"target\": \"services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908\"," +
+ "\"source\": \"services/inventory/v11/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
+ "\"target\": \"services/inventory/v11/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908\"," +
"\"properties\": {" +
"\"prevent-delete\": \"NONE\" } }";
-
+
private CrudRestService mockService;
-
+
@Rule
public ExpectedException thrown = ExpectedException.none();
@Before
public void init() throws Exception {
ClassLoader classLoader = getClass().getClassLoader();
- File dir = new File(classLoader.getResource("model").getFile());
+ File dir = new File(classLoader.getResource("rules").getFile());
System.setProperty("CONFIG_HOME", dir.getParent());
EdgeRulesLoader.resetSchemaVersionContext();
@@ -91,150 +90,170 @@ public class CrudRestServiceTest {
Mockito.anyString(), Mockito.anyString(), Mockito.any(CrudRestService.Action.class), Mockito.anyString(),
Mockito.any(HttpHeaders.class));
}
-
+
@Test
public void testDelete() throws CrudException {
Response response;
-
- response = mockService.deleteVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
+
+ response = mockService.deleteVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
"services/inventory/v11", new TestHeaders(), null, new TestRequest());
assertTrue(response.getStatus() == 200);
-
- response = mockService.deleteEdge("", "v11", "tosca.relationships.HostedOn",
- "872dd5df-0be9-4167-95e9-2cf4b21165ed",
+
+ response = mockService.deleteEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
"services/inventory/v11", new TestHeaders(), null, new TestRequest());
assertTrue(response.getStatus() == 200);
}
-
+
@Test
public void testAddVertex() throws CrudException {
Response response;
-
+
// Cannot find OXM version
- response = mockService.addVertex(postVertexPayload, "v8", "services/inventory/v8",
+ response = mockService.addVertex(postVertexPayload, "v7", "services/inventory/v8",
new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 500);
Assert.assertNull(response.getEntityTag());
-
- response = mockService.addVertex(postMissingPropVertexPayload, "v11", "services/inventory/v11",
+
+ response = mockService.addVertex(postMissingPropVertexPayload, "v11", "services/inventory/v11",
new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 400);
Assert.assertNull(response.getEntityTag());
-
- response = mockService.addVertex(postVertexPayload, "v11", "services/inventory/v11",
+
+ response = mockService.addVertex(postVertexPayload, "v11", "services/inventory/v11",
new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 201);
Assert.assertEquals(response.getEntityTag().getValue(), "test123");
-
- response = mockService.addVertex(postMissingPropVertexPayload, "v11", "pserver", "services/inventory/v11",
+
+ response = mockService.addVertex(postMissingPropVertexPayload, "v11", "pserver", "services/inventory/v11",
new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 400);
Assert.assertNull(response.getEntityTag());
-
- response = mockService.addVertex(postVertexPayload, "v11", "pserver", "services/inventory/v11",
+
+ response = mockService.addVertex(postVertexPayload, "v11", "pserver", "services/inventory/v11",
new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 201);
Assert.assertEquals(response.getEntityTag().getValue(), "test123");
}
-
+
@Test
public void testAddEdge() throws CrudException {
Response response;
-
- response = mockService.addEdge(postEdgePayload, "v11", "services/inventory/v11",
+
+ response = mockService.addEdge(postEdgePayload, "v9", "services/inventory/v9",
new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 201);
Assert.assertEquals(response.getEntityTag().getValue(), "test123");
-
- response = mockService.addEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "services/inventory/v11",
+
+ response = mockService.addEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "services/inventory/v11",
new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 201);
Assert.assertEquals(response.getEntityTag().getValue(), "test123");
}
-
+
+ @Test
+ public void testAddEdgeMultiplicityRules() throws CrudException {
+ Response response;
+
+ response = mockService.addEdge(postEdgePayload, "v10", "services/inventory/v10",
+ new TestHeaders(), null, new TestRequest());
+ Assert.assertEquals("MANY2ONE multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn",
+ response.getEntity().toString());
+ Assert.assertEquals(400, response.getStatus());
+
+ response = mockService.addEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "services/inventory/v9",
+ new TestHeaders(), null, new TestRequest());
+ Assert.assertEquals(201, response.getStatus());
+
+ response = mockService.addEdge(postEdgePayload, "v8", "tosca.relationships.HostedOn", "services/inventory/v8",
+ new TestHeaders(), null, new TestRequest());
+ Assert.assertEquals("ONE2MANY multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn",
+ response.getEntity().toString());
+ Assert.assertEquals(400, response.getStatus());
+ }
+
@Test
public void testUpdateVertex() throws CrudException {
Response response;
// Cannot find OXM version
- response = mockService.updateVertex(putVertexPayload, "v8", "pserver", "test-uuid", "services/inventory/v8",
+ response = mockService.updateVertex(putVertexPayload, "v7", "pserver", "test-uuid", "services/inventory/v8",
new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 500);
Assert.assertNull(response.getEntityTag());
-
+
// Test ID mismatch
- response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "bad-id",
+ response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "bad-id",
"services/inventory/v11", new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 400);
- Assert.assertNull(response.getEntityTag());
-
+ Assert.assertNull(response.getEntityTag());
+
// Success case
response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "test-uuid", "services/inventory/v11",
new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
- assertTrue(response.getStatus() == 200);
+ assertTrue(response.getStatus() == 200);
Assert.assertEquals(response.getEntityTag().getValue(), "test123");
-
+
// Patch
- response = mockService.patchVertex(putVertexPayload, "v11", "pserver", "test-uuid",
+ response = mockService.patchVertex(putVertexPayload, "v11", "pserver", "test-uuid",
"services/inventory/v11", new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
- assertTrue(response.getStatus() == 200);
+ assertTrue(response.getStatus() == 200);
Assert.assertEquals(response.getEntityTag().getValue(), "test123");
}
-
+
@Test
public void testUpdateEdge() throws CrudException {
Response response;
-
- response = mockService.updateEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "my-uuid",
- "services/inventory/v11", new TestHeaders(), null, new TestRequest());
+
+ response = mockService.updateEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "my-uuid",
+ "services/inventory/v9", new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
- assertTrue(response.getStatus() == 200);
+ assertTrue(response.getStatus() == 200);
Assert.assertEquals(response.getEntityTag().getValue(), "test123");
-
+
// Patch
- response = mockService.patchEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "my-uuid",
- "services/inventory/v11", new TestHeaders(), null, new TestRequest());
+ response = mockService.patchEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "my-uuid",
+ "services/inventory/v9", new TestHeaders(), null, new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 200);
Assert.assertEquals(response.getEntityTag().getValue(), "test123");
}
-
+
@Test
public void testGet() throws CrudException {
Response response;
-
- response = mockService.getVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
+
+ response = mockService.getVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
"services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 200);
-
- response = mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
+
+ response = mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
"services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 200);
-
- response = mockService.getVertices("", "v11", "pserver",
+
+ response = mockService.getVertices("", "v11", "pserver",
"services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 200);
-
- response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn",
+
+ response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn",
"services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 200);
}
-
+
@Test
public void testValidRequestHeader() throws CrudException {
TestHeaders testHeaders = new TestHeaders();
@@ -270,7 +289,7 @@ public class CrudRestServiceTest {
testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
mockService.validateRequestHeader(testHeaders);
}
-
+
@Test
public void testEmptyRequestHeader() throws CrudException {
thrown.expect(CrudException.class);
@@ -306,21 +325,21 @@ public class CrudRestServiceTest {
System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
assertTrue(response.getStatus() == 200);
}
-
+
@Test
public void testBulk() throws CrudException, IOException {
Response response;
-
+
File bulkFile = new File("src/test/resources/payloads/bulk.json");
- String payloadStr = readFileToString(bulkFile);
+ String payloadStr = readFileToString(bulkFile);
System.out.println(payloadStr);
-
- response = mockService.addBulk(payloadStr, "v11", "",
- "services/inventory/v11", new TestHeaders(), null, new TestRequest());
+
+ response = mockService.addBulk(payloadStr, "v9", "",
+ "services/inventory/v9", new TestHeaders(), null, new TestRequest());
System.out.println("Bulk Response: " + response.getStatus() + "\n" + response.getEntity().toString());
- assertTrue(response.getStatus() == 200);
+ assertTrue(response.getStatus() == 200);
}
-
+
public static String readFileToString(File aFile) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(aFile));
diff --git a/src/test/java/org/onap/crud/util/CrudServiceUtilTest.java b/src/test/java/org/onap/crud/util/CrudServiceUtilTest.java
index 872586e..37cdeec 100644
--- a/src/test/java/org/onap/crud/util/CrudServiceUtilTest.java
+++ b/src/test/java/org/onap/crud/util/CrudServiceUtilTest.java
@@ -22,7 +22,7 @@ package org.onap.crud.util;
import org.junit.Assert;
import org.junit.Test;
-import org.onap.crud.service.VertexPayload;
+import org.onap.crud.parser.VertexPayload;
import org.onap.crud.service.util.TestHeaders;
import com.google.gson.JsonElement;
diff --git a/src/test/java/org/onap/schema/RelationshipSchemaTest.java b/src/test/java/org/onap/schema/RelationshipSchemaTest.java
index 9467f41..a32762f 100644
--- a/src/test/java/org/onap/schema/RelationshipSchemaTest.java
+++ b/src/test/java/org/onap/schema/RelationshipSchemaTest.java
@@ -20,18 +20,16 @@
*/
package org.onap.schema;
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Multimap;
+import static org.junit.Assert.*;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import org.junit.Test;
import org.onap.aai.edges.EdgeRule;
import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException;
import org.onap.crud.exception.CrudException;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.junit.Assert.*;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Multimap;
public class RelationshipSchemaTest {
diff --git a/src/test/java/org/onap/schema/validation/MultiplicityValidatorTest.java b/src/test/java/org/onap/schema/validation/MultiplicityValidatorTest.java
new file mode 100644
index 0000000..409ce3c
--- /dev/null
+++ b/src/test/java/org/onap/schema/validation/MultiplicityValidatorTest.java
@@ -0,0 +1,159 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017-2018 Amdocs
+ * ================================================================================
+ * 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.schema.validation;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onap.crud.entity.Edge;
+import org.onap.crud.entity.Vertex;
+import org.onap.crud.exception.CrudException;
+import org.onap.crud.parser.EdgePayload;
+import org.onap.schema.EdgeRulesLoader;
+import org.onap.schema.validation.MultiplicityValidator.MultiplicityType;
+
+public class MultiplicityValidatorTest {
+
+ private final String postEdgePayload = "{" + "\"type\": \"tosca.relationships.HostedOn\","
+ + "\"source\": \"services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\","
+ + "\"target\": \"services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908\","
+ + "\"properties\": {" + "\"prevent-delete\": \"NONE\" } }";
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ @Before
+ public void init() {
+ ClassLoader classLoader = getClass().getClassLoader();
+ File dir = new File(classLoader.getResource("rules").getFile());
+ System.setProperty("CONFIG_HOME", dir.getParent());
+ EdgeRulesLoader.resetSchemaVersionContext();
+ }
+
+ @Test
+ public void testValidPayloadForMultiplicityRule() throws CrudException {
+ Map<String, List<Edge>> vertexMap = getEdgesForVertex(MultiplicityType.MANY2ONE, true);
+ MultiplicityValidator.validatePayloadMultiplicity(EdgePayload.fromJson(postEdgePayload),
+ vertexMap.get("source"), vertexMap.get("target"),
+ "tosca.relationships.HostedOn", "v11");
+ }
+
+ @Test
+ public void testInvalidPayloadForMultiplicityRule() throws CrudException {
+ thrown.expect(CrudException.class);
+ thrown.expectMessage("MANY2ONE multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn");
+
+ Map<String, List<Edge>> vertexMap = getEdgesForVertex(MultiplicityType.MANY2ONE, false);
+ MultiplicityValidator.validatePayloadMultiplicity(EdgePayload.fromJson(postEdgePayload),
+ vertexMap.get("source"), vertexMap.get("target"),
+ "tosca.relationships.HostedOn", "v11");
+ }
+
+ @Test
+ public void testIsVertexValidForMultiplicityType() throws CrudException {
+
+ Map<String, List<Edge>> vertexMap = getEdgesForVertex(MultiplicityType.MANY2MANY, true);
+ Assert.assertTrue(MultiplicityValidator.isVertexValidForMultiplicityType(vertexMap.get("source"),
+ vertexMap.get("target"), MultiplicityType.MANY2MANY));
+
+ vertexMap = getEdgesForVertex(MultiplicityType.MANY2ONE, true);
+ Assert.assertTrue(MultiplicityValidator.isVertexValidForMultiplicityType(
+ vertexMap.get("source"), vertexMap.get("target"), MultiplicityType.MANY2ONE));
+
+ vertexMap = getEdgesForVertex(MultiplicityType.ONE2MANY, true);
+ Assert.assertTrue(MultiplicityValidator.isVertexValidForMultiplicityType(
+ vertexMap.get("source"), vertexMap.get("target"), MultiplicityType.ONE2MANY));
+
+ vertexMap = getEdgesForVertex(MultiplicityType.ONE2ONE, true);
+ Assert.assertTrue(MultiplicityValidator.isVertexValidForMultiplicityType(
+ vertexMap.get("source"), vertexMap.get("target"), MultiplicityType.ONE2ONE));
+
+ vertexMap = getEdgesForVertex(MultiplicityType.ONE2MANY, false);
+ Assert.assertFalse(MultiplicityValidator.isVertexValidForMultiplicityType(
+ vertexMap.get("source"), vertexMap.get("target"), MultiplicityType.ONE2MANY));
+
+ vertexMap = getEdgesForVertex(MultiplicityType.ONE2ONE, false);
+ Assert.assertFalse(MultiplicityValidator.isVertexValidForMultiplicityType(
+ vertexMap.get("source"), vertexMap.get("target"), MultiplicityType.ONE2ONE));
+ }
+
+ private Map<String, List<Edge>> getEdgesForVertex(MultiplicityType multiplicityType, boolean pass) {
+
+ Map<String, List<Edge>> vertexMap = new HashMap<String, List<Edge>>();
+ List<Edge> edgesForSourceVertex = new ArrayList<>();
+ List<Edge> edgesForTargetVertex = new ArrayList<>();
+
+ switch (multiplicityType) {
+ case MANY2MANY:
+ if (pass) {
+ Edge edge = new Edge.Builder("type").source(new Vertex.Builder("source").build())
+ .target(new Vertex.Builder("target").build()).build();
+ edgesForSourceVertex.add(edge);
+ edgesForTargetVertex.add(edge);
+ }
+ break;
+ case MANY2ONE:
+ if (pass) {
+ Edge edge = new Edge.Builder("type").source(new Vertex.Builder("source").build())
+ .target(new Vertex.Builder("target").build()).build();
+ edgesForTargetVertex.add(edge);
+ } else {
+ Edge edge = new Edge.Builder("type").source(new Vertex.Builder("source").build())
+ .target(new Vertex.Builder("target").build()).build();
+ edgesForSourceVertex.add(edge);
+ edgesForTargetVertex.add(edge);
+ }
+ break;
+ case ONE2MANY:
+ if (pass) {
+ Edge edge = new Edge.Builder("type").source(new Vertex.Builder("source").build())
+ .target(new Vertex.Builder("target").build()).build();
+ edgesForSourceVertex.add(edge);
+ } else {
+ Edge edge = new Edge.Builder("type").source(new Vertex.Builder("source").build())
+ .target(new Vertex.Builder("target").build()).build();
+ edgesForSourceVertex.add(edge);
+ edgesForTargetVertex.add(edge);
+ }
+ break;
+ case ONE2ONE:
+ if (!pass) {
+ Edge edge = new Edge.Builder("type").source(new Vertex.Builder("source").build())
+ .target(new Vertex.Builder("target").build()).build();
+ edgesForSourceVertex.add(edge);
+ edgesForTargetVertex.add(edge);
+ }
+ break;
+ }
+ vertexMap.put("source", edgesForSourceVertex);
+ vertexMap.put("target", edgesForTargetVertex);
+
+ return vertexMap;
+ }
+
+}