2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2019 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2019 Amdocs
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.aai.schemaif.json;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertFalse;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertNull;
28 import static org.junit.Assert.assertTrue;
29 import static org.junit.Assert.fail;
31 import java.io.ByteArrayOutputStream;
32 import java.io.IOException;
33 import java.io.PrintWriter;
34 import java.io.StringWriter;
35 import java.nio.file.Files;
36 import java.nio.file.Paths;
37 import java.util.List;
39 import java.util.zip.ZipEntry;
40 import java.util.zip.ZipOutputStream;
41 import org.junit.Before;
42 import org.junit.Test;
43 import org.onap.aai.schemaif.SchemaProviderException;
44 import org.onap.aai.schemaif.definitions.EdgeSchema;
45 import org.onap.aai.schemaif.definitions.PropertySchema;
46 import org.onap.aai.schemaif.definitions.VertexSchema;
47 import org.onap.aai.schemaif.definitions.types.ComplexDataType;
48 import org.onap.aai.schemaif.definitions.types.DataType.Type;
49 import org.onap.aai.schemaif.definitions.types.ListDataType;
50 import org.onap.aai.schemaif.definitions.types.MapDataType;
51 import org.onap.aai.schemaif.json.definitions.DataTypeDefinition;
52 import org.onap.aai.schemaif.json.definitions.JsonEdgeSchema;
53 import org.onap.aai.schemaif.json.definitions.JsonPropertySchema;
54 import org.onap.aai.schemaif.json.definitions.JsonSchema;
55 import org.onap.aai.schemaif.json.definitions.JsonVertexSchema;
58 public class JsonSchemaProviderTest {
60 JsonSchemaProviderConfig config = new JsonSchemaProviderConfig();
64 config.setSchemaServiceBaseUrl("https://testurl.com:8443");
65 config.setSchemaServiceCertFile("/c/certfile");
66 config.setSchemaServiceCertPwd("my-password");
67 config.setServiceName("test-service");
71 public void testReadZipJson() throws IOException, SchemaProviderException {
72 JsonSchemaProvider jsonSchemaProvider = new JsonSchemaProvider(config);
74 ByteArrayOutputStream fos = new ByteArrayOutputStream();
75 ZipOutputStream zos = new ZipOutputStream(fos);
76 zos.putNextEntry(new ZipEntry("schemaServiceResponse.json"));
77 byte[] fileData = Files.readAllBytes(Paths.get("src/test/resources/json/schemaServiceResponse.json"));
78 zos.write(fileData, 0, fileData.length);
82 String testSchema = readFile("src/test/resources/json/schemaServiceResponse.json");
83 SchemaServiceResponse resp = SchemaServiceResponse.fromJson(testSchema);
85 String result = jsonSchemaProvider.unzipAndGetJSONString(fos.toByteArray());
86 SchemaServiceResponse resp2 = SchemaServiceResponse.fromJson(result);
87 assertEquals(resp.toJson(), resp2.toJson());
91 public void testJsonSchemaLoad() {
93 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
94 JsonSchema jsonSchema = JsonSchema.fromJson(testSchema);
97 JsonEdgeSchema edgeSchema = null;
98 for (JsonEdgeSchema edge : jsonSchema.getRelationshipTypes()) {
99 if ( (edge.getFrom().equals("onap.nodes.sdwan.uCPE"))
100 && (edge.getTo().equals("onap.nodes.sdwan.service.SubscriberService")) ) {
106 assertNotNull(edgeSchema);
107 assertEquals("onap.relationships.sdwan.BelongsTo", edgeSchema.getLabel());
110 JsonVertexSchema vertexSchema = null;
111 for (JsonVertexSchema v : jsonSchema.getNodeTypes()) {
112 if ( (v.getName().equals("org.onap.resource.NetworkRules")) ) {
118 assertNotNull(vertexSchema);
119 assertEquals(2, vertexSchema.getProperties().size());
121 JsonPropertySchema propSchema = null;
122 for (JsonPropertySchema p : vertexSchema.getProperties()) {
123 if ( (p.getName().equals("network_policy_entries")) ) {
129 assertNotNull(propSchema);
130 assertEquals(false, propSchema.getRequired());
131 assertEquals(false, propSchema.getUnique());
132 assertEquals("org.onap.datatypes.RuleList", propSchema.getDataType());
133 assertEquals("", propSchema.getDefaultValue());
134 assertEquals(4, propSchema.getAnnotations().size());
136 // Test DataType Schema
137 DataTypeDefinition dataType = null;
138 for (DataTypeDefinition d : jsonSchema.getDataTypes()) {
139 if ( (d.getName().equals("org.onap.datatypes.network.VlanRequirements")) ) {
145 assertNotNull(dataType);
146 assertEquals("org.onap.datatypes.network.VlanRequirements", dataType.getName());
147 assertEquals(4, dataType.getProperties().size());
150 for (JsonPropertySchema p : dataType.getProperties()) {
151 if ( (p.getName().equals("vlan_type")) ) {
157 assertNotNull(propSchema);
158 assertEquals(false, propSchema.getRequired());
159 assertEquals("string", propSchema.getDataType());
160 assertEquals("", propSchema.getDefaultValue());
162 catch (Exception ex) {
163 StringWriter writer = new StringWriter();
164 PrintWriter printWriter = new PrintWriter(writer);
165 ex.printStackTrace(printWriter);
166 System.out.println(writer);
172 public void testJsonSchemaTranslateVertex() {
174 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
175 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
176 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
178 VertexSchema vertSchema =
179 schemaProvider.getVertexSchema("tosca.nodes.objectstorage",
180 schemaProvider.getLatestSchemaVersion());
181 System.out.println(vertSchema.toString());
183 // Validate vertex schema
184 assertEquals("tosca.nodes.ObjectStorage", vertSchema.getName());
185 assertEquals("size,name", vertSchema.getAnnotationValue("searchable"));
186 assertEquals("aai-uuid,name", vertSchema.getAnnotationValue("indexedProps"));
188 PropertySchema propSchema = vertSchema.getPropertySchema("Name");
189 assertEquals("name", propSchema.getName());
190 assertEquals("", propSchema.getDefaultValue());
191 assertTrue(propSchema.isRequired());
192 assertFalse(propSchema.isKey());
193 assertFalse(propSchema.isReserved());
194 assertEquals(0, propSchema.getDataType().getType().compareTo(Type.STRING));
195 assertEquals("AAI", propSchema.getAnnotationValue("Source_of_truth_type"));
197 propSchema = vertSchema.getPropertySchema("Size");
198 assertEquals("size", propSchema.getName());
199 assertEquals("50", propSchema.getDefaultValue());
200 assertEquals(0, propSchema.getDataType().getType().compareTo(Type.INT));
202 propSchema = vertSchema.getPropertySchema("source-of-truth");
203 assertEquals("source-of-truth", propSchema.getName());
204 assertFalse(propSchema.isRequired());
205 assertTrue(propSchema.isReserved());
206 assertEquals(0, propSchema.getDataType().getType().compareTo(Type.STRING));
208 catch (Exception ex) {
209 StringWriter writer = new StringWriter();
210 PrintWriter printWriter = new PrintWriter(writer);
211 ex.printStackTrace(printWriter);
212 System.out.println(writer);
218 public void testJsonSchemaTranslateEdge() {
220 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
221 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
222 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
224 EdgeSchema edgeSchema = schemaProvider.getEdgeSchema("tosca.relationships.hostedOn",
225 "tosca.nodes.Softwarecomponent", "tosca.nodes.compute",
226 schemaProvider.getLatestSchemaVersion());
227 System.out.println(edgeSchema.toString());
229 // Validate edge schema
230 assertEquals("tosca.relationships.HostedOn", edgeSchema.getName());
231 assertEquals("tosca.nodes.SoftwareComponent", edgeSchema.getSource());
232 assertEquals("tosca.nodes.Compute", edgeSchema.getTarget());
233 assertEquals(edgeSchema.getMultiplicity(), EdgeSchema.Multiplicity.MANY_2_MANY);
234 assertEquals("NONE", edgeSchema.getAnnotationValue("contains-other-v"));
238 catch (Exception ex) {
239 StringWriter writer = new StringWriter();
240 PrintWriter printWriter = new PrintWriter(writer);
241 ex.printStackTrace(printWriter);
242 System.out.println(writer);
248 public void testJsonSchemaTranslateAdjacentEdge() {
250 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
251 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
252 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
254 Set<EdgeSchema> edgeSchemaList =
255 schemaProvider.getAdjacentEdgeSchema("tosca.nodes.Database",
256 schemaProvider.getLatestSchemaVersion());
258 // Validate edge schema
259 assertEquals(3, edgeSchemaList.size());
261 for (EdgeSchema es : edgeSchemaList) {
262 System.out.println(es.toString());
263 switch (es.getName()) {
264 case "tosca.relationships.HostedOn":
265 assertEquals("tosca.nodes.Database", es.getSource());
266 assertEquals("tosca.nodes.DBMS", es.getTarget());
267 assertEquals(es.getMultiplicity(), EdgeSchema.Multiplicity.MANY_2_MANY);
269 case "tosca.relationships.RoutesTo":
270 case "tosca.relationships.Uses":
271 assertEquals("tosca.nodes.LoadBalancer", es.getSource());
272 assertEquals("tosca.nodes.Database", es.getTarget());
273 assertEquals(es.getMultiplicity(), EdgeSchema.Multiplicity.MANY_2_MANY);
281 catch (Exception ex) {
282 StringWriter writer = new StringWriter();
283 PrintWriter printWriter = new PrintWriter(writer);
284 ex.printStackTrace(printWriter);
285 System.out.println(writer);
291 public void testJsonSchemaSourceTargetEdges() {
293 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
294 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
295 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
297 Set<EdgeSchema> edgeSchemaList =
298 schemaProvider.getEdgeSchemaForSourceTarget("tosca.nodes.LoadBalancer",
299 "tosca.nodes.Database",
300 schemaProvider.getLatestSchemaVersion());
302 // Validate edge schema
303 assertEquals(2, edgeSchemaList.size());
305 for (EdgeSchema es : edgeSchemaList) {
306 System.out.println(es.toString());
307 if (es.getName().equals("tosca.relationships.Uses")) {
308 assertEquals("tosca.nodes.LoadBalancer", es.getSource());
309 assertEquals("tosca.nodes.Database", es.getTarget());
310 assertEquals(es.getMultiplicity(), EdgeSchema.Multiplicity.MANY_2_MANY);
312 else if (es.getName().equals("tosca.relationships.RoutesTo")) {
313 assertEquals("tosca.nodes.LoadBalancer", es.getSource());
314 assertEquals("tosca.nodes.Database", es.getTarget());
315 assertEquals(es.getMultiplicity(), EdgeSchema.Multiplicity.MANY_2_MANY);
322 catch (Exception ex) {
323 StringWriter writer = new StringWriter();
324 PrintWriter printWriter = new PrintWriter(writer);
325 ex.printStackTrace(printWriter);
326 System.out.println(writer);
332 public void testJsonSchemaWildcardEdges() {
334 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
335 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
336 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
338 EdgeSchema edgeSchema =
339 schemaProvider.getEdgeSchema("amdocs.linkedTo", "service-instance",
340 "onap.nodes.sdwan.ManagementDomain", schemaProvider.getLatestSchemaVersion());
342 assertEquals("amdocs.linkedTo", edgeSchema.getName());
343 assertEquals("service-instance", edgeSchema.getSource());
344 assertEquals("onap.nodes.sdwan.ManagementDomain", edgeSchema.getTarget());
346 edgeSchema = schemaProvider.getEdgeSchema("amdocs.linkedTo", "onap.nodes.sdwan.ManagementDomain",
347 "service-instance", schemaProvider.getLatestSchemaVersion());
349 assertNull(edgeSchema);
353 schemaProvider.getEdgeSchema("amdocs.unknownRelationship", "unknown",
354 "onap.nodes.sdwan.ManagementDomain", schemaProvider.getLatestSchemaVersion());
356 assertEquals("amdocs.unknownRelationship", edgeSchema.getName());
357 assertEquals("unknown", edgeSchema.getSource());
358 assertEquals("onap.nodes.sdwan.ManagementDomain", edgeSchema.getTarget());
361 schemaProvider.getEdgeSchema("amdocs.unknownRelationship", "onap.nodes.sdwan.ManagementDomain",
362 "unknown", schemaProvider.getLatestSchemaVersion());
364 assertEquals("amdocs.unknownRelationship", edgeSchema.getName());
365 assertEquals("onap.nodes.sdwan.ManagementDomain", edgeSchema.getSource());
366 assertEquals("unknown", edgeSchema.getTarget());
368 Set<EdgeSchema> edgeSchemaList =
369 schemaProvider.getEdgeSchemaForSourceTarget("service-instance",
370 "onap.nodes.sdwan.ManagementDomain",
371 schemaProvider.getLatestSchemaVersion());
372 assertEquals(1, edgeSchemaList.size());
374 edgeSchemaList = schemaProvider.getEdgeSchemaForSourceTarget("unknown", "unknown",
375 schemaProvider.getLatestSchemaVersion());
376 assertEquals(1, edgeSchemaList.size());
378 edgeSchemaList = schemaProvider.getEdgeSchemaForSourceTarget("service-instance", "service-instance",
379 schemaProvider.getLatestSchemaVersion());
380 assertEquals(1, edgeSchemaList.size());
383 edgeSchemaList = schemaProvider.getAdjacentEdgeSchema("service-instance", schemaProvider.getLatestSchemaVersion());
384 System.out.println("EDGE LIST: \n\n" + edgeSchemaList);
385 assertEquals(8, edgeSchemaList.size());
387 catch (Exception ex) {
388 StringWriter writer = new StringWriter();
389 PrintWriter printWriter = new PrintWriter(writer);
390 ex.printStackTrace(printWriter);
391 System.out.println(writer);
397 public void testInvalidVertexOrEdge() {
399 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
400 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
401 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
403 VertexSchema vertSchema =
404 schemaProvider.getVertexSchema("bad-node", schemaProvider.getLatestSchemaVersion());
405 assertNull(vertSchema);
407 EdgeSchema edgeSchema = schemaProvider.getEdgeSchema("org.onap.relationships.inventory.LocatedIn",
408 "cloud-region", "bad-node", schemaProvider.getLatestSchemaVersion());
409 assertNull(edgeSchema);
411 Set<EdgeSchema> edgeSchemaList =
412 schemaProvider.getAdjacentEdgeSchema("org.onap.nodes.bad-node",
413 schemaProvider.getLatestSchemaVersion());
414 assertTrue(edgeSchemaList.isEmpty());
416 catch (Exception ex) {
417 StringWriter writer = new StringWriter();
418 PrintWriter printWriter = new PrintWriter(writer);
419 ex.printStackTrace(printWriter);
420 System.out.println(writer);
426 public void testJsonSchemaListAttribute() {
428 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
429 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
430 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
432 VertexSchema vertSchema =
433 schemaProvider.getVertexSchema("onap.nodes.sdwan.ManagementDomain",
434 schemaProvider.getLatestSchemaVersion());
435 System.out.println(vertSchema.toString());
438 PropertySchema propSchema = vertSchema.getPropertySchema("controllers");
439 assertEquals(0, propSchema.getDataType().getType().compareTo(Type.LIST));
440 ListDataType listType = (ListDataType)propSchema.getDataType();
441 assertEquals(0, listType.getListType().getType().compareTo(Type.STRING));
443 catch (Exception ex) {
444 StringWriter writer = new StringWriter();
445 PrintWriter printWriter = new PrintWriter(writer);
446 ex.printStackTrace(printWriter);
447 System.out.println(writer);
453 public void testJsonSchemaMapAttribute() {
455 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
456 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
457 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
459 VertexSchema vertSchema =
460 schemaProvider.getVertexSchema("onap.nodes.sdwan.ManagementDomain",
461 schemaProvider.getLatestSchemaVersion());
462 System.out.println(vertSchema.toString());
465 PropertySchema propSchema = vertSchema.getPropertySchema("analyticClusters");
466 assertEquals(0, propSchema.getDataType().getType().compareTo(Type.MAP));
467 MapDataType mapType = (MapDataType)propSchema.getDataType();
468 assertEquals(0, mapType.getMapType().getType().compareTo(Type.STRING));
470 catch (Exception ex) {
471 StringWriter writer = new StringWriter();
472 PrintWriter printWriter = new PrintWriter(writer);
473 ex.printStackTrace(printWriter);
474 System.out.println(writer);
480 public void testJsonSchemaComplexAttribute() {
482 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
483 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
484 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
486 VertexSchema vertSchema =
487 schemaProvider.getVertexSchema("org.onap.resource.extContrailCP",
488 schemaProvider.getLatestSchemaVersion());
489 System.out.println(vertSchema.toString());
491 System.out.println("\n\nSize: " + vertSchema.getPropertySchemaList().size());
492 System.out.println(vertSchema.getPropertySchemaList());
493 assertEquals(22, vertSchema.getPropertySchemaList().size());
495 // Validate property schema
496 PropertySchema propSchema = vertSchema.getPropertySchema("exCP_naming");
497 assertEquals(0, propSchema.getDataType().getType().compareTo(Type.COMPLEX));
498 ComplexDataType complexType = (ComplexDataType)propSchema.getDataType();
499 List<PropertySchema> complexProps = complexType.getSubProperties();
500 assertEquals(4, complexProps.size());
502 PropertySchema subProp = null;
503 for (PropertySchema p : complexProps) {
504 if (p.getName().equals("naming_policy")) {
509 assertNotNull(subProp);
510 assertFalse(subProp.isRequired());
511 assertEquals(0, subProp.getDataType().getType().compareTo(Type.STRING));
513 catch (Exception ex) {
514 StringWriter writer = new StringWriter();
515 PrintWriter printWriter = new PrintWriter(writer);
516 ex.printStackTrace(printWriter);
517 System.out.println(writer);
523 public void testParseSchemaServiceResponse() {
525 String testSchema = readFile("src/test/resources/json/schemaServiceResponse.json");
526 SchemaServiceResponse resp = SchemaServiceResponse.fromJson(testSchema);
528 System.out.println(resp.toJson());
529 assertEquals("v1", resp.getVersion());
531 JsonSchema jsonSchema = resp.getData();
532 System.out.println(jsonSchema.toJson());
534 assertEquals(1, jsonSchema.getDataTypes().size());
536 catch (Exception ex) {
537 StringWriter writer = new StringWriter();
538 PrintWriter printWriter = new PrintWriter(writer);
539 ex.printStackTrace(printWriter);
540 System.out.println(writer);
546 public void testSchemaValidateSuccess() {
548 String testSchema = readFile("src/test/resources/json/schemaServiceResponse.json");
549 SchemaServiceResponse schema = SchemaServiceResponse.fromJson(testSchema);
550 schema.getData().validate();
552 catch (Exception ex) {
553 StringWriter writer = new StringWriter();
554 PrintWriter printWriter = new PrintWriter(writer);
555 ex.printStackTrace(printWriter);
556 System.out.println(writer);
561 @Test(expected = SchemaProviderException.class)
562 public void testSchemaValidateBadEdge() throws SchemaProviderException {
563 SchemaServiceResponse schema;
566 String testSchema = readFile("src/test/resources/json/badEdgeSchema.json");
567 schema = SchemaServiceResponse.fromJson(testSchema);
569 catch (Exception ex) {
574 schema.getData().validate();
577 @Test(expected = SchemaProviderException.class)
578 public void testSchemaValidateBadVertex() throws SchemaProviderException {
579 SchemaServiceResponse schema;
582 String testSchema = readFile("src/test/resources/json/badVertexSchema.json");
583 schema = SchemaServiceResponse.fromJson(testSchema);
585 catch (Exception ex) {
590 System.out.println("Validate");
591 schema.getData().validate();
592 System.out.println("Validate done");
595 @Test(expected = SchemaProviderException.class)
596 public void testSchemaValidateBadType() throws SchemaProviderException {
597 SchemaServiceResponse schema;
600 String testSchema = readFile("src/test/resources/json/badTypeSchema.json");
601 schema = SchemaServiceResponse.fromJson(testSchema);
603 catch (Exception ex) {
608 schema.getData().validate();
611 @Test(expected = SchemaProviderException.class)
612 public void testSchemaValidateBadProp() throws SchemaProviderException {
613 SchemaServiceResponse schema;
616 String testSchema = readFile("src/test/resources/json/badPropSchema.json");
617 schema = SchemaServiceResponse.fromJson(testSchema);
619 catch (Exception ex) {
624 schema.getData().validate();
627 static String readFile(String path) throws IOException {
628 byte[] encoded = Files.readAllBytes(Paths.get(path));
629 return new String(encoded);