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.assertTrue;
26 import java.io.IOException;
27 import java.io.PrintWriter;
28 import java.io.StringWriter;
29 import java.nio.file.Files;
30 import java.nio.file.Paths;
31 import java.util.List;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.onap.aai.schemaif.SchemaProviderException;
37 import org.onap.aai.schemaif.definitions.EdgeSchema;
38 import org.onap.aai.schemaif.definitions.PropertySchema;
39 import org.onap.aai.schemaif.definitions.VertexSchema;
40 import org.onap.aai.schemaif.definitions.types.ComplexDataType;
41 import org.onap.aai.schemaif.definitions.types.DataType.Type;
42 import org.onap.aai.schemaif.definitions.types.ListDataType;
43 import org.onap.aai.schemaif.definitions.types.MapDataType;
44 import org.onap.aai.schemaif.json.definitions.DataTypeDefinition;
45 import org.onap.aai.schemaif.json.definitions.JsonEdgeSchema;
46 import org.onap.aai.schemaif.json.definitions.JsonPropertySchema;
47 import org.onap.aai.schemaif.json.definitions.JsonSchema;
48 import org.onap.aai.schemaif.json.definitions.JsonVertexSchema;
51 public class JsonSchemaProviderTest {
53 JsonSchemaProviderConfig config = new JsonSchemaProviderConfig();
56 public void init() throws Exception {
57 config.setSchemaServiceBaseUrl("https://testurl.com:8443");
58 config.setSchemaServiceCertFile("/c/certfile");
59 config.setSchemaServiceCertPwd("my-password");
60 config.setServiceName("test-service");
64 public void testJsonSchemaLoad() {
66 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
67 JsonSchema jsonSchema = JsonSchema.fromJson(testSchema);
70 JsonEdgeSchema edgeSchema = null;
71 for (JsonEdgeSchema edge : jsonSchema.getRelationshipTypes()) {
72 if ( (edge.getFrom().equals("onap.nodes.sdwan.uCPE"))
73 && (edge.getTo().equals("onap.nodes.sdwan.service.SubscriberService")) ) {
79 assertTrue(edgeSchema.getLabel().equals("onap.relationships.sdwan.BelongsTo"));
82 JsonVertexSchema vertexSchema = null;
83 for (JsonVertexSchema v : jsonSchema.getNodeTypes()) {
84 if ( (v.getName().equals("org.onap.resource.NetworkRules")) ) {
90 assertTrue(vertexSchema.getProperties().size() == 2);
92 JsonPropertySchema propSchema = null;
93 for (JsonPropertySchema p : vertexSchema.getProperties()) {
94 if ( (p.getName().equals("network_policy_entries")) ) {
100 assertTrue(propSchema.getRequired() == false);
101 assertTrue(propSchema.getUnique() == false);
102 assertTrue(propSchema.getDataType().equals("org.onap.datatypes.RuleList"));
103 assertTrue(propSchema.getDefaultValue().equals(""));
104 assertTrue(propSchema.getAnnotations().size() == 4);
106 // Test DataType Schema
107 DataTypeDefinition dataType = null;
108 for (DataTypeDefinition d : jsonSchema.getDataTypes()) {
109 if ( (d.getName().equals("org.onap.datatypes.network.VlanRequirements")) ) {
115 assertTrue(dataType.getName().equals("org.onap.datatypes.network.VlanRequirements"));
116 assertTrue(dataType.getProperties().size() == 4);
119 for (JsonPropertySchema p : dataType.getProperties()) {
120 if ( (p.getName().equals("vlan_type")) ) {
126 assertTrue(propSchema.getRequired() == false);
127 assertTrue(propSchema.getDataType().equals("string"));
128 assertTrue(propSchema.getDefaultValue().equals(""));
130 catch (Exception ex) {
131 StringWriter writer = new StringWriter();
132 PrintWriter printWriter = new PrintWriter(writer);
133 ex.printStackTrace(printWriter);
134 System.out.println(writer.toString());
140 public void testJsonSchemaTranslateVertex() {
142 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
143 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
144 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
146 VertexSchema vertSchema =
147 schemaProvider.getVertexSchema("tosca.nodes.objectstorage",
148 schemaProvider.getLatestSchemaVersion());
149 System.out.println(vertSchema.toString());
151 // Validate vertex schema
152 assertTrue(vertSchema.getName().equals("tosca.nodes.ObjectStorage"));
153 assertTrue(vertSchema.getAnnotationValue("searchable").equals("size,name"));
154 assertTrue(vertSchema.getAnnotationValue("indexedProps").equals("aai-uuid,name"));
156 PropertySchema propSchema = vertSchema.getPropertySchema("Name");
157 assertTrue(propSchema.getName().equals("name"));
158 assertTrue(propSchema.getDefaultValue().equals(""));
159 assertTrue(propSchema.isRequired());
160 assertTrue(!propSchema.isKey());
161 assertTrue(!propSchema.isReserved());
162 assertTrue(propSchema.getDataType().getType().compareTo(Type.STRING) == 0);
163 assertTrue(propSchema.getAnnotationValue("Source_of_truth_type").equals("AAI"));
165 propSchema = vertSchema.getPropertySchema("Size");
166 assertTrue(propSchema.getName().equals("size"));
167 assertTrue(propSchema.getDefaultValue().equals("50"));
168 assertTrue(propSchema.getDataType().getType().compareTo(Type.INT) == 0);
170 propSchema = vertSchema.getPropertySchema("source-of-truth");
171 assertTrue(propSchema.getName().equals("source-of-truth"));
172 assertTrue(!propSchema.isRequired());
173 assertTrue(propSchema.isReserved());
174 assertTrue(propSchema.getDataType().getType().compareTo(Type.STRING) == 0);
176 catch (Exception ex) {
177 StringWriter writer = new StringWriter();
178 PrintWriter printWriter = new PrintWriter(writer);
179 ex.printStackTrace(printWriter);
180 System.out.println(writer.toString());
186 public void testJsonSchemaTranslateEdge() {
188 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
189 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
190 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
192 EdgeSchema edgeSchema = schemaProvider.getEdgeSchema("tosca.relationships.hostedOn",
193 "tosca.nodes.Softwarecomponent", "tosca.nodes.compute",
194 schemaProvider.getLatestSchemaVersion());
195 System.out.println(edgeSchema.toString());
197 // Validate edge schema
198 assertTrue(edgeSchema.getName().equals("tosca.relationships.HostedOn"));
199 assertTrue(edgeSchema.getSource().equals("tosca.nodes.SoftwareComponent"));
200 assertTrue(edgeSchema.getTarget().equals("tosca.nodes.Compute"));
201 assertTrue(edgeSchema.getMultiplicity().equals(EdgeSchema.Multiplicity.MANY_2_MANY));
202 assertTrue(edgeSchema.getAnnotationValue("contains-other-v").equals("NONE"));
206 catch (Exception ex) {
207 StringWriter writer = new StringWriter();
208 PrintWriter printWriter = new PrintWriter(writer);
209 ex.printStackTrace(printWriter);
210 System.out.println(writer.toString());
216 public void testJsonSchemaTranslateAdjacentEdge() {
218 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
219 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
220 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
222 Set<EdgeSchema> edgeSchemaList =
223 schemaProvider.getAdjacentEdgeSchema("tosca.nodes.Database",
224 schemaProvider.getLatestSchemaVersion());
226 // Validate edge schema
227 assertTrue(edgeSchemaList.size() == 3);
229 for (EdgeSchema es : edgeSchemaList) {
230 System.out.println(es.toString());
231 if (es.getName().equals("tosca.relationships.HostedOn")) {
232 assertTrue(es.getSource().equals("tosca.nodes.Database"));
233 assertTrue(es.getTarget().equals("tosca.nodes.DBMS"));
234 assertTrue(es.getMultiplicity().equals(EdgeSchema.Multiplicity.MANY_2_MANY));
236 else if (es.getName().equals("tosca.relationships.RoutesTo")) {
237 assertTrue(es.getSource().equals("tosca.nodes.LoadBalancer"));
238 assertTrue(es.getTarget().equals("tosca.nodes.Database"));
239 assertTrue(es.getMultiplicity().equals(EdgeSchema.Multiplicity.MANY_2_MANY));
241 else if (es.getName().equals("tosca.relationships.Uses")) {
242 assertTrue(es.getSource().equals("tosca.nodes.LoadBalancer"));
243 assertTrue(es.getTarget().equals("tosca.nodes.Database"));
244 assertTrue(es.getMultiplicity().equals(EdgeSchema.Multiplicity.MANY_2_MANY));
251 catch (Exception ex) {
252 StringWriter writer = new StringWriter();
253 PrintWriter printWriter = new PrintWriter(writer);
254 ex.printStackTrace(printWriter);
255 System.out.println(writer.toString());
261 public void testJsonSchemaSourceTargetEdges() {
263 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
264 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
265 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
267 Set<EdgeSchema> edgeSchemaList =
268 schemaProvider.getEdgeSchemaForSourceTarget("tosca.nodes.LoadBalancer",
269 "tosca.nodes.Database",
270 schemaProvider.getLatestSchemaVersion());
272 // Validate edge schema
273 assertTrue(edgeSchemaList.size() == 2);
275 for (EdgeSchema es : edgeSchemaList) {
276 System.out.println(es.toString());
277 if (es.getName().equals("tosca.relationships.Uses")) {
278 assertTrue(es.getSource().equals("tosca.nodes.LoadBalancer"));
279 assertTrue(es.getTarget().equals("tosca.nodes.Database"));
280 assertTrue(es.getMultiplicity().equals(EdgeSchema.Multiplicity.MANY_2_MANY));
282 else if (es.getName().equals("tosca.relationships.RoutesTo")) {
283 assertTrue(es.getSource().equals("tosca.nodes.LoadBalancer"));
284 assertTrue(es.getTarget().equals("tosca.nodes.Database"));
285 assertTrue(es.getMultiplicity().equals(EdgeSchema.Multiplicity.MANY_2_MANY));
292 catch (Exception ex) {
293 StringWriter writer = new StringWriter();
294 PrintWriter printWriter = new PrintWriter(writer);
295 ex.printStackTrace(printWriter);
296 System.out.println(writer.toString());
302 public void testJsonSchemaWildcardEdges() {
304 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
305 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
306 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
308 EdgeSchema edgeSchema =
309 schemaProvider.getEdgeSchema("amdocs.linkedTo", "service-instance",
310 "onap.nodes.sdwan.ManagementDomain", schemaProvider.getLatestSchemaVersion());
312 assertTrue(edgeSchema.getName().equals("amdocs.linkedTo"));
313 assertTrue(edgeSchema.getSource().equals("service-instance"));
314 assertTrue(edgeSchema.getTarget().equals("onap.nodes.sdwan.ManagementDomain"));
316 edgeSchema = schemaProvider.getEdgeSchema("amdocs.linkedTo", "onap.nodes.sdwan.ManagementDomain",
317 "service-instance", schemaProvider.getLatestSchemaVersion());
319 assertTrue(edgeSchema == null);
323 schemaProvider.getEdgeSchema("amdocs.unknownRelationship", "unknown",
324 "onap.nodes.sdwan.ManagementDomain", schemaProvider.getLatestSchemaVersion());
326 assertTrue(edgeSchema.getName().equals("amdocs.unknownRelationship"));
327 assertTrue(edgeSchema.getSource().equals("unknown"));
328 assertTrue(edgeSchema.getTarget().equals("onap.nodes.sdwan.ManagementDomain"));
331 schemaProvider.getEdgeSchema("amdocs.unknownRelationship", "onap.nodes.sdwan.ManagementDomain",
332 "unknown", schemaProvider.getLatestSchemaVersion());
334 assertTrue(edgeSchema.getName().equals("amdocs.unknownRelationship"));
335 assertTrue(edgeSchema.getSource().equals("onap.nodes.sdwan.ManagementDomain"));
336 assertTrue(edgeSchema.getTarget().equals("unknown"));
338 Set<EdgeSchema> edgeSchemaList =
339 schemaProvider.getEdgeSchemaForSourceTarget("service-instance",
340 "onap.nodes.sdwan.ManagementDomain",
341 schemaProvider.getLatestSchemaVersion());
342 assertTrue(edgeSchemaList.size() == 1);
344 edgeSchemaList = schemaProvider.getEdgeSchemaForSourceTarget("unknown", "unknown",
345 schemaProvider.getLatestSchemaVersion());
346 assertTrue(edgeSchemaList.size() == 1);
348 edgeSchemaList = schemaProvider.getEdgeSchemaForSourceTarget("service-instance", "service-instance",
349 schemaProvider.getLatestSchemaVersion());
350 assertTrue(edgeSchemaList.size() == 1);
353 edgeSchemaList = schemaProvider.getAdjacentEdgeSchema("service-instance", schemaProvider.getLatestSchemaVersion());
354 System.out.println("EDGE LIST: \n\n" + edgeSchemaList);
355 assertTrue(edgeSchemaList.size() == 8);
357 catch (Exception ex) {
358 StringWriter writer = new StringWriter();
359 PrintWriter printWriter = new PrintWriter(writer);
360 ex.printStackTrace(printWriter);
361 System.out.println(writer.toString());
367 public void testInvalidVertexOrEdge() throws SchemaProviderException {
369 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
370 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
371 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
373 VertexSchema vertSchema =
374 schemaProvider.getVertexSchema("bad-node", schemaProvider.getLatestSchemaVersion());
375 assertTrue(vertSchema == null);
377 EdgeSchema edgeSchema = schemaProvider.getEdgeSchema("org.onap.relationships.inventory.LocatedIn",
378 "cloud-region", "bad-node", schemaProvider.getLatestSchemaVersion());
379 assertTrue(edgeSchema == null);
381 Set<EdgeSchema> edgeSchemaList =
382 schemaProvider.getAdjacentEdgeSchema("org.onap.nodes.bad-node",
383 schemaProvider.getLatestSchemaVersion());
384 assertTrue(edgeSchemaList.isEmpty());
386 catch (Exception ex) {
387 StringWriter writer = new StringWriter();
388 PrintWriter printWriter = new PrintWriter(writer);
389 ex.printStackTrace(printWriter);
390 System.out.println(writer.toString());
396 public void testJsonSchemaListAttribute() {
398 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
399 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
400 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
402 VertexSchema vertSchema =
403 schemaProvider.getVertexSchema("onap.nodes.sdwan.ManagementDomain",
404 schemaProvider.getLatestSchemaVersion());
405 System.out.println(vertSchema.toString());
408 PropertySchema propSchema = vertSchema.getPropertySchema("controllers");
409 assertTrue(propSchema.getDataType().getType().compareTo(Type.LIST) == 0);
410 ListDataType listType = (ListDataType)propSchema.getDataType();
411 assertTrue(listType.getListType().getType().compareTo(Type.STRING) == 0);
413 catch (Exception ex) {
414 StringWriter writer = new StringWriter();
415 PrintWriter printWriter = new PrintWriter(writer);
416 ex.printStackTrace(printWriter);
417 System.out.println(writer.toString());
423 public void testJsonSchemaMapAttribute() {
425 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
426 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
427 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
429 VertexSchema vertSchema =
430 schemaProvider.getVertexSchema("onap.nodes.sdwan.ManagementDomain",
431 schemaProvider.getLatestSchemaVersion());
432 System.out.println(vertSchema.toString());
435 PropertySchema propSchema = vertSchema.getPropertySchema("analyticClusters");
436 assertTrue(propSchema.getDataType().getType().compareTo(Type.MAP) == 0);
437 MapDataType mapType = (MapDataType)propSchema.getDataType();
438 assertTrue(mapType.getMapType().getType().compareTo(Type.STRING) == 0);
440 catch (Exception ex) {
441 StringWriter writer = new StringWriter();
442 PrintWriter printWriter = new PrintWriter(writer);
443 ex.printStackTrace(printWriter);
444 System.out.println(writer.toString());
450 public void testJsonSchemaComplexAttribute() {
452 String testSchema = readFile("src/test/resources/json/jsonSchema.json");
453 JsonSchemaProvider schemaProvider = new JsonSchemaProvider(config);
454 schemaProvider.loadSchema(testSchema, schemaProvider.getLatestSchemaVersion());
456 VertexSchema vertSchema =
457 schemaProvider.getVertexSchema("org.onap.resource.extContrailCP",
458 schemaProvider.getLatestSchemaVersion());
459 System.out.println(vertSchema.toString());
461 System.out.println("\n\nSize: " + vertSchema.getPropertySchemaList().size());
462 System.out.println(vertSchema.getPropertySchemaList());
463 assertTrue(vertSchema.getPropertySchemaList().size() == 22);
465 // Validate property schema
466 PropertySchema propSchema = vertSchema.getPropertySchema("exCP_naming");
467 assertTrue(propSchema.getDataType().getType().compareTo(Type.COMPLEX) == 0);
468 ComplexDataType complexType = (ComplexDataType)propSchema.getDataType();
469 List<PropertySchema> complexProps = complexType.getSubProperties();
470 assertTrue(complexProps.size() == 4);
472 PropertySchema subProp = null;
473 for (PropertySchema p : complexProps) {
474 if (p.getName().equals("naming_policy")) {
479 assertTrue(!subProp.isRequired());
480 assertTrue(subProp.getDataType().getType().compareTo(Type.STRING) == 0);
482 catch (Exception ex) {
483 StringWriter writer = new StringWriter();
484 PrintWriter printWriter = new PrintWriter(writer);
485 ex.printStackTrace(printWriter);
486 System.out.println(writer.toString());
492 public void testParseSchemaServiceResponse() {
494 String testSchema = readFile("src/test/resources/json/schemaServiceResponse.json");
495 SchemaServiceResponse resp = SchemaServiceResponse.fromJson(testSchema);
497 System.out.println(resp.toJson());
498 assertTrue(resp.getVersion().equals("v1"));
500 JsonSchema jsonSchema = resp.getData();
501 System.out.println(jsonSchema.toJson());
503 assertTrue(jsonSchema.getDataTypes().size() == 1);
505 catch (Exception ex) {
506 StringWriter writer = new StringWriter();
507 PrintWriter printWriter = new PrintWriter(writer);
508 ex.printStackTrace(printWriter);
509 System.out.println(writer.toString());
515 public void testSchemaValidateSuccess() {
517 String testSchema = readFile("src/test/resources/json/schemaServiceResponse.json");
518 SchemaServiceResponse schema = SchemaServiceResponse.fromJson(testSchema);
519 schema.getData().validate();
521 catch (Exception ex) {
522 StringWriter writer = new StringWriter();
523 PrintWriter printWriter = new PrintWriter(writer);
524 ex.printStackTrace(printWriter);
525 System.out.println(writer.toString());
530 @Test(expected = SchemaProviderException.class)
531 public void testSchemaValidateBadEdge() throws SchemaProviderException {
532 SchemaServiceResponse schema;
535 String testSchema = readFile("src/test/resources/json/badEdgeSchema.json");
536 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);
554 catch (Exception ex) {
559 System.out.println("Validate");
560 schema.getData().validate();
561 System.out.println("Validate done");
564 @Test(expected = SchemaProviderException.class)
565 public void testSchemaValidateBadType() throws SchemaProviderException {
566 SchemaServiceResponse schema;
569 String testSchema = readFile("src/test/resources/json/badTypeSchema.json");
570 schema = SchemaServiceResponse.fromJson(testSchema);
572 catch (Exception ex) {
577 schema.getData().validate();
580 @Test(expected = SchemaProviderException.class)
581 public void testSchemaValidateBadProp() throws SchemaProviderException {
582 SchemaServiceResponse schema;
585 String testSchema = readFile("src/test/resources/json/badPropSchema.json");
586 schema = SchemaServiceResponse.fromJson(testSchema);
588 catch (Exception ex) {
593 schema.getData().validate();
596 static String readFile(String path) throws IOException {
597 byte[] encoded = Files.readAllBytes(Paths.get(path));
598 return new String(encoded);