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;
42 import org.junit.Before;
43 import org.junit.Test;
44 import org.onap.aai.schemaif.SchemaProviderException;
45 import org.onap.aai.schemaif.definitions.EdgeSchema;
46 import org.onap.aai.schemaif.definitions.PropertySchema;
47 import org.onap.aai.schemaif.definitions.VertexSchema;
48 import org.onap.aai.schemaif.definitions.types.ComplexDataType;
49 import org.onap.aai.schemaif.definitions.types.DataType.Type;
50 import org.onap.aai.schemaif.definitions.types.ListDataType;
51 import org.onap.aai.schemaif.definitions.types.MapDataType;
52 import org.onap.aai.schemaif.json.definitions.DataTypeDefinition;
53 import org.onap.aai.schemaif.json.definitions.JsonEdgeSchema;
54 import org.onap.aai.schemaif.json.definitions.JsonPropertySchema;
55 import org.onap.aai.schemaif.json.definitions.JsonSchema;
56 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());
161 } catch (Exception ex) {
162 StringWriter writer = new StringWriter();
163 PrintWriter printWriter = new PrintWriter(writer);
164 ex.printStackTrace(printWriter);
165 System.out.println(writer);
171 public void testJsonSchemaTranslateVertex() {
173 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
174 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
175 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
177 VertexSchema vertSchema = schemaProvider.getVertexSchema("tosca.nodes.objectstorage",
178 schemaProvider.getLatestSchemaVersion());
179 System.out.println(vertSchema.toString());
181 // Validate vertex schema
182 assertEquals("tosca.nodes.ObjectStorage", vertSchema.getName());
183 assertEquals("size,name", vertSchema.getAnnotationValue("searchable"));
184 assertEquals("aai-uuid,name", vertSchema.getAnnotationValue("indexedProps"));
186 PropertySchema propSchema = vertSchema.getPropertySchema("Name");
187 assertEquals("name", propSchema.getName());
188 assertEquals("", propSchema.getDefaultValue());
189 assertTrue(propSchema.isRequired());
190 assertFalse(propSchema.isKey());
191 assertFalse(propSchema.isReserved());
192 assertEquals(0, propSchema.getDataType().getType().compareTo(Type.STRING));
193 assertEquals("AAI", propSchema.getAnnotationValue("Source_of_truth_type"));
195 propSchema = vertSchema.getPropertySchema("Size");
196 assertEquals("size", propSchema.getName());
197 assertEquals("50", propSchema.getDefaultValue());
198 assertEquals(0, propSchema.getDataType().getType().compareTo(Type.INT));
200 propSchema = vertSchema.getPropertySchema("source-of-truth");
201 assertEquals("source-of-truth", propSchema.getName());
202 assertFalse(propSchema.isRequired());
203 assertTrue(propSchema.isReserved());
204 assertEquals(0, propSchema.getDataType().getType().compareTo(Type.STRING));
205 } catch (Exception ex) {
206 StringWriter writer = new StringWriter();
207 PrintWriter printWriter = new PrintWriter(writer);
208 ex.printStackTrace(printWriter);
209 System.out.println(writer);
215 public void testJsonSchemaTranslateEdge() {
217 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
218 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
219 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
221 EdgeSchema edgeSchema = schemaProvider.getEdgeSchema("tosca.relationships.hostedOn",
222 "tosca.nodes.Softwarecomponent", "tosca.nodes.compute", schemaProvider.getLatestSchemaVersion());
223 System.out.println(edgeSchema.toString());
225 // Validate edge schema
226 assertEquals("tosca.relationships.HostedOn", edgeSchema.getName());
227 assertEquals("tosca.nodes.SoftwareComponent", edgeSchema.getSource());
228 assertEquals("tosca.nodes.Compute", edgeSchema.getTarget());
229 assertEquals(edgeSchema.getMultiplicity(), EdgeSchema.Multiplicity.MANY_2_MANY);
230 assertEquals("NONE", edgeSchema.getAnnotationValue("contains-other-v"));
232 } catch (Exception ex) {
233 StringWriter writer = new StringWriter();
234 PrintWriter printWriter = new PrintWriter(writer);
235 ex.printStackTrace(printWriter);
236 System.out.println(writer);
242 public void testJsonSchemaTranslateAdjacentEdge() {
244 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
245 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
246 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
248 Set<EdgeSchema> edgeSchemaList = schemaProvider.getAdjacentEdgeSchema("tosca.nodes.Database",
249 schemaProvider.getLatestSchemaVersion());
251 // Validate edge schema
252 assertEquals(3, edgeSchemaList.size());
254 for (EdgeSchema es : edgeSchemaList) {
255 System.out.println(es.toString());
256 switch (es.getName()) {
257 case "tosca.relationships.HostedOn":
258 assertEquals("tosca.nodes.Database", es.getSource());
259 assertEquals("tosca.nodes.DBMS", es.getTarget());
260 assertEquals(es.getMultiplicity(), EdgeSchema.Multiplicity.MANY_2_MANY);
262 case "tosca.relationships.RoutesTo":
263 case "tosca.relationships.Uses":
264 assertEquals("tosca.nodes.LoadBalancer", es.getSource());
265 assertEquals("tosca.nodes.Database", es.getTarget());
266 assertEquals(es.getMultiplicity(), EdgeSchema.Multiplicity.MANY_2_MANY);
273 } catch (Exception ex) {
274 StringWriter writer = new StringWriter();
275 PrintWriter printWriter = new PrintWriter(writer);
276 ex.printStackTrace(printWriter);
277 System.out.println(writer);
283 public void testJsonSchemaSourceTargetEdges() {
285 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
286 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
287 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
289 Set<EdgeSchema> edgeSchemaList = schemaProvider.getEdgeSchemaForSourceTarget("tosca.nodes.LoadBalancer",
290 "tosca.nodes.Database", schemaProvider.getLatestSchemaVersion());
292 // Validate edge schema
293 assertEquals(2, edgeSchemaList.size());
295 for (EdgeSchema es : edgeSchemaList) {
296 System.out.println(es.toString());
297 if (es.getName().equals("tosca.relationships.Uses")) {
298 assertEquals("tosca.nodes.LoadBalancer", es.getSource());
299 assertEquals("tosca.nodes.Database", es.getTarget());
300 assertEquals(es.getMultiplicity(), EdgeSchema.Multiplicity.MANY_2_MANY);
301 } else if (es.getName().equals("tosca.relationships.RoutesTo")) {
302 assertEquals("tosca.nodes.LoadBalancer", es.getSource());
303 assertEquals("tosca.nodes.Database", es.getTarget());
304 assertEquals(es.getMultiplicity(), EdgeSchema.Multiplicity.MANY_2_MANY);
309 } catch (Exception ex) {
310 StringWriter writer = new StringWriter();
311 PrintWriter printWriter = new PrintWriter(writer);
312 ex.printStackTrace(printWriter);
313 System.out.println(writer);
319 public void testJsonSchemaWildcardEdges() {
321 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
322 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
323 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
325 EdgeSchema edgeSchema = schemaProvider.getEdgeSchema("amdocs.linkedTo", "service-instance",
326 "onap.nodes.sdwan.ManagementDomain", schemaProvider.getLatestSchemaVersion());
328 assertEquals("amdocs.linkedTo", edgeSchema.getName());
329 assertEquals("service-instance", edgeSchema.getSource());
330 assertEquals("onap.nodes.sdwan.ManagementDomain", edgeSchema.getTarget());
332 edgeSchema = schemaProvider.getEdgeSchema("amdocs.linkedTo", "onap.nodes.sdwan.ManagementDomain",
333 "service-instance", schemaProvider.getLatestSchemaVersion());
335 assertNull(edgeSchema);
337 edgeSchema = schemaProvider.getEdgeSchema("amdocs.unknownRelationship", "unknown",
338 "onap.nodes.sdwan.ManagementDomain", schemaProvider.getLatestSchemaVersion());
340 assertEquals("amdocs.unknownRelationship", edgeSchema.getName());
341 assertEquals("unknown", edgeSchema.getSource());
342 assertEquals("onap.nodes.sdwan.ManagementDomain", edgeSchema.getTarget());
344 edgeSchema = schemaProvider.getEdgeSchema("amdocs.unknownRelationship", "onap.nodes.sdwan.ManagementDomain",
345 "unknown", schemaProvider.getLatestSchemaVersion());
347 assertEquals("amdocs.unknownRelationship", edgeSchema.getName());
348 assertEquals("onap.nodes.sdwan.ManagementDomain", edgeSchema.getSource());
349 assertEquals("unknown", edgeSchema.getTarget());
351 Set<EdgeSchema> edgeSchemaList = schemaProvider.getEdgeSchemaForSourceTarget("service-instance",
352 "onap.nodes.sdwan.ManagementDomain", schemaProvider.getLatestSchemaVersion());
353 assertEquals(1, edgeSchemaList.size());
355 edgeSchemaList = schemaProvider.getEdgeSchemaForSourceTarget("unknown", "unknown",
356 schemaProvider.getLatestSchemaVersion());
357 assertEquals(1, edgeSchemaList.size());
359 edgeSchemaList = schemaProvider.getEdgeSchemaForSourceTarget("service-instance", "service-instance",
360 schemaProvider.getLatestSchemaVersion());
361 assertEquals(1, edgeSchemaList.size());
364 schemaProvider.getAdjacentEdgeSchema("service-instance", schemaProvider.getLatestSchemaVersion());
365 System.out.println("EDGE LIST: \n\n" + edgeSchemaList);
366 assertEquals(8, edgeSchemaList.size());
367 } catch (Exception ex) {
368 StringWriter writer = new StringWriter();
369 PrintWriter printWriter = new PrintWriter(writer);
370 ex.printStackTrace(printWriter);
371 System.out.println(writer);
377 public void testInvalidVertexOrEdge() {
379 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
380 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
381 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
383 VertexSchema vertSchema =
384 schemaProvider.getVertexSchema("bad-node", schemaProvider.getLatestSchemaVersion());
385 assertNull(vertSchema);
387 EdgeSchema edgeSchema = schemaProvider.getEdgeSchema("org.onap.relationships.inventory.LocatedIn",
388 "cloud-region", "bad-node", schemaProvider.getLatestSchemaVersion());
389 assertNull(edgeSchema);
391 Set<EdgeSchema> edgeSchemaList = schemaProvider.getAdjacentEdgeSchema("org.onap.nodes.bad-node",
392 schemaProvider.getLatestSchemaVersion());
393 assertTrue(edgeSchemaList.isEmpty());
394 } catch (Exception ex) {
395 StringWriter writer = new StringWriter();
396 PrintWriter printWriter = new PrintWriter(writer);
397 ex.printStackTrace(printWriter);
398 System.out.println(writer);
404 public void testJsonSchemaListAttribute() {
406 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
407 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
408 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
410 VertexSchema vertSchema = schemaProvider.getVertexSchema("onap.nodes.sdwan.ManagementDomain",
411 schemaProvider.getLatestSchemaVersion());
412 System.out.println(vertSchema.toString());
415 PropertySchema propSchema = vertSchema.getPropertySchema("controllers");
416 assertEquals(0, propSchema.getDataType().getType().compareTo(Type.LIST));
417 ListDataType listType = (ListDataType) propSchema.getDataType();
418 assertEquals(0, listType.getListType().getType().compareTo(Type.STRING));
419 } catch (Exception ex) {
420 StringWriter writer = new StringWriter();
421 PrintWriter printWriter = new PrintWriter(writer);
422 ex.printStackTrace(printWriter);
423 System.out.println(writer);
429 public void testJsonSchemaMapAttribute() {
431 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
432 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
433 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
435 VertexSchema vertSchema = schemaProvider.getVertexSchema("onap.nodes.sdwan.ManagementDomain",
436 schemaProvider.getLatestSchemaVersion());
437 System.out.println(vertSchema.toString());
440 PropertySchema propSchema = vertSchema.getPropertySchema("analyticClusters");
441 assertEquals(0, propSchema.getDataType().getType().compareTo(Type.MAP));
442 MapDataType mapType = (MapDataType) propSchema.getDataType();
443 assertEquals(0, mapType.getMapType().getType().compareTo(Type.STRING));
444 } catch (Exception ex) {
445 StringWriter writer = new StringWriter();
446 PrintWriter printWriter = new PrintWriter(writer);
447 ex.printStackTrace(printWriter);
448 System.out.println(writer);
454 public void testJsonSchemaComplexAttribute() {
456 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
457 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
458 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
460 VertexSchema vertSchema = schemaProvider.getVertexSchema("org.onap.resource.extContrailCP",
461 schemaProvider.getLatestSchemaVersion());
462 System.out.println(vertSchema.toString());
464 System.out.println("\n\nSize: " + vertSchema.getPropertySchemaList().size());
465 System.out.println(vertSchema.getPropertySchemaList());
466 assertEquals(22, vertSchema.getPropertySchemaList().size());
468 // Validate property schema
469 PropertySchema propSchema = vertSchema.getPropertySchema("exCP_naming");
470 assertEquals(0, propSchema.getDataType().getType().compareTo(Type.COMPLEX));
471 ComplexDataType complexType = (ComplexDataType) propSchema.getDataType();
472 List<PropertySchema> complexProps = complexType.getSubProperties();
473 assertEquals(4, complexProps.size());
475 PropertySchema subProp = null;
476 for (PropertySchema p : complexProps) {
477 if (p.getName().equals("naming_policy")) {
482 assertNotNull(subProp);
483 assertFalse(subProp.isRequired());
484 assertEquals(0, subProp.getDataType().getType().compareTo(Type.STRING));
485 } catch (Exception ex) {
486 StringWriter writer = new StringWriter();
487 PrintWriter printWriter = new PrintWriter(writer);
488 ex.printStackTrace(printWriter);
489 System.out.println(writer);
495 public void testParseSchemaServiceResponse() {
497 String testSchema = readFile("src/test/resources/json/schemaServiceResponse.json");
498 SchemaServiceResponse resp = SchemaServiceResponse.fromJson(testSchema);
500 System.out.println(resp.toJson());
501 assertEquals("v1", resp.getVersion());
503 JsonSchema jsonSchema = resp.getData();
504 System.out.println(jsonSchema.toJson());
506 assertEquals(1, jsonSchema.getDataTypes().size());
507 } catch (Exception ex) {
508 StringWriter writer = new StringWriter();
509 PrintWriter printWriter = new PrintWriter(writer);
510 ex.printStackTrace(printWriter);
511 System.out.println(writer);
517 public void testSchemaValidateSuccess() {
519 String testSchema = readFile("src/test/resources/json/schemaServiceResponse.json");
520 SchemaServiceResponse schema = SchemaServiceResponse.fromJson(testSchema);
521 schema.getData().validate();
522 } catch (Exception ex) {
523 StringWriter writer = new StringWriter();
524 PrintWriter printWriter = new PrintWriter(writer);
525 ex.printStackTrace(printWriter);
526 System.out.println(writer);
531 @Test(expected = SchemaProviderException.class)
532 public void testSchemaValidateBadEdge() throws SchemaProviderException {
533 SchemaServiceResponse schema;
536 String testSchema = readFile("src/test/resources/json/badEdgeSchema.json");
537 schema = SchemaServiceResponse.fromJson(testSchema);
538 } catch (Exception ex) {
543 schema.getData().validate();
546 @Test(expected = SchemaProviderException.class)
547 public void testSchemaValidateBadVertex() throws SchemaProviderException {
548 SchemaServiceResponse schema;
551 String testSchema = readFile("src/test/resources/json/badVertexSchema.json");
552 schema = SchemaServiceResponse.fromJson(testSchema);
553 } catch (Exception ex) {
558 System.out.println("Validate");
559 schema.getData().validate();
560 System.out.println("Validate done");
563 @Test(expected = SchemaProviderException.class)
564 public void testSchemaValidateBadType() throws SchemaProviderException {
565 SchemaServiceResponse schema;
568 String testSchema = readFile("src/test/resources/json/badTypeSchema.json");
569 schema = SchemaServiceResponse.fromJson(testSchema);
570 } catch (Exception ex) {
575 schema.getData().validate();
578 @Test(expected = SchemaProviderException.class)
579 public void testSchemaValidateBadProp() throws SchemaProviderException {
580 SchemaServiceResponse schema;
583 String testSchema = readFile("src/test/resources/json/badPropSchema.json");
584 schema = SchemaServiceResponse.fromJson(testSchema);
585 } catch (Exception ex) {
590 schema.getData().validate();
593 static String readFile(String path) throws IOException {
594 byte[] encoded = Files.readAllBytes(Paths.get(path));
595 return new String(encoded);