21ba985b32774155e30bf410e2a9141348fe3807
[aai/aai-common.git] / aai-schema-abstraction / src / test / java / org / onap / aai / schemaif / oxm / OxmSchemaProviderTest.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
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
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
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=========================================================
20  */
21
22 package org.onap.aai.schemaif.oxm;
23
24 import static org.junit.Assert.assertTrue;
25
26 import java.io.PrintWriter;
27 import java.io.StringWriter;
28 import java.util.Set;
29
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.mockito.runners.MockitoJUnitRunner;
33 import org.onap.aai.schemaif.SchemaProviderException;
34 import org.onap.aai.schemaif.definitions.EdgeSchema;
35 import org.onap.aai.schemaif.definitions.PropertySchema;
36 import org.onap.aai.schemaif.definitions.VertexSchema;
37 import org.onap.aai.schemaif.definitions.types.DataType.Type;
38
39 @RunWith(MockitoJUnitRunner.class)
40 public class OxmSchemaProviderTest extends OxmSchemaServiceSetup {
41
42     @Test
43     public void testLoadingSchema() throws SchemaProviderException {
44         try {
45             OxmSchemaProvider schemaProvider = new OxmSchemaProvider();
46             schemaProvider.loadSchema();
47
48             VertexSchema vertSchema =
49                     schemaProvider.getVertexSchema("pserver", schemaProvider.getLatestSchemaVersion());
50             System.out.println(vertSchema.toString());
51
52             EdgeSchema edgeSchema = schemaProvider.getEdgeSchema("org.onap.relationships.inventory.LocatedIn",
53                     "cloud-region", "zone", schemaProvider.getLatestSchemaVersion());
54             System.out.println(edgeSchema.toString());
55
56             // Validate vertex schema
57             assertTrue(vertSchema.getName().equals("pserver"));
58             assertTrue(vertSchema.getAnnotationValue("nameProps").equals("pserver-name2"));
59             assertTrue(vertSchema.getAnnotationValue("dependentOn") == null);
60
61             PropertySchema propSchema = vertSchema.getPropertySchema("hostname");
62             assertTrue(propSchema.getName().equals("hostname"));
63             assertTrue(propSchema.getDefaultValue().equals(""));
64             assertTrue(propSchema.isRequired());
65             assertTrue(!propSchema.isKey());
66             assertTrue(propSchema.getDataType().getType().compareTo(Type.STRING) == 0);
67             Object obj = propSchema.validateValue("somestring");
68             assertTrue(obj instanceof String);
69
70             propSchema = vertSchema.getPropertySchema("in-maint");
71             assertTrue(propSchema.getName().equals("in-maint"));
72             assertTrue(propSchema.getDefaultValue().equals("false"));
73             assertTrue(!propSchema.isRequired());
74             assertTrue(!propSchema.isKey());
75             assertTrue(!propSchema.isReserved());
76             assertTrue(propSchema.getDataType().getType().compareTo(Type.BOOL) == 0);
77             obj = propSchema.validateValue("True");
78             assertTrue(obj instanceof Boolean);
79             obj = propSchema.validateValue("false");
80             assertTrue(obj instanceof Boolean);
81             assertTrue(propSchema.getDataType().validateValue("badValue") == null);
82
83             propSchema = vertSchema.getPropertySchema("aai-node-type");
84             assertTrue(propSchema.getName().equals("aai-node-type"));
85             assertTrue(propSchema.getDefaultValue().equals(""));
86             assertTrue(!propSchema.isRequired());
87             assertTrue(!propSchema.isKey());
88             assertTrue(propSchema.isReserved());
89             assertTrue(propSchema.getDataType().getType().compareTo(Type.STRING) == 0);
90
91             propSchema = vertSchema.getPropertySchema("pserver-id");
92             assertTrue(propSchema.getName().equals("pserver-id"));
93             assertTrue(propSchema.getDefaultValue().equals(""));
94             assertTrue(propSchema.isRequired());
95             assertTrue(!propSchema.isReserved());
96             assertTrue(propSchema.isKey());
97             assertTrue(propSchema.getDataType().getType().compareTo(Type.STRING) == 0);
98
99             propSchema = vertSchema.getPropertySchema("number-of-cpus");
100             assertTrue(propSchema.getName().equals("number-of-cpus"));
101             assertTrue(propSchema.getAnnotationValue("source-of-truth-type").equals("openstack"));
102             assertTrue(propSchema.getDataType().getType().compareTo(Type.INT) == 0);
103             obj = propSchema.validateValue("35");
104             assertTrue(obj instanceof Integer);
105             obj = propSchema.validateValue("5.0");
106             assertTrue(obj instanceof Integer);
107             assertTrue(propSchema.getDataType().validateValue("5.5") == null);
108             assertTrue(propSchema.getDataType().validateValue("xyz") == null);
109
110             // Validate edge schema
111             assertTrue(edgeSchema.getName().equals("org.onap.relationships.inventory.LocatedIn"));
112             assertTrue(edgeSchema.getSource().equals("cloud-region"));
113             assertTrue(edgeSchema.getTarget().equals("zone"));
114             assertTrue(edgeSchema.getMultiplicity().equals(EdgeSchema.Multiplicity.MANY_2_ONE));
115             assertTrue(edgeSchema.getAnnotationValue("contains-other-v").equals("NONE"));
116             assertTrue(edgeSchema.getPropertySchema("prevent-delete").getDataType().getType().equals(Type.STRING));
117
118             // Validate 'dependentOn' annotation
119             vertSchema = schemaProvider.getVertexSchema("tenant", schemaProvider.getLatestSchemaVersion());
120             assertTrue(vertSchema.getAnnotationValue("dependentOn").equals("cloud-region"));
121         } catch (Exception ex) {
122             StringWriter writer = new StringWriter();
123             PrintWriter printWriter = new PrintWriter(writer);
124             ex.printStackTrace(printWriter);
125             System.out.println(writer.toString());
126             assertTrue(false);
127         }
128     }
129
130     @Test
131     public void testAdjacentEdges() throws SchemaProviderException {
132         try {
133             OxmSchemaProvider schemaProvider = new OxmSchemaProvider();
134             schemaProvider.loadSchema();
135
136             Set<EdgeSchema> edgeSchemaList =
137                     schemaProvider.getAdjacentEdgeSchema("snapshot", schemaProvider.getLatestSchemaVersion());
138
139             // Validate edge schema
140             assertTrue(edgeSchemaList.size() == 2);
141
142             for (EdgeSchema es : edgeSchemaList) {
143                 System.out.println(es.toString());
144                 if (es.getName().equals("org.onap.relationships.inventory.BelongsTo")) {
145                     assertTrue(es.getSource().equals("snapshot"));
146                     assertTrue(es.getTarget().equals("cloud-region"));
147                     assertTrue(es.getMultiplicity().equals(EdgeSchema.Multiplicity.MANY_2_ONE));
148                 } else if (es.getName().equals("org.onap.relationships.inventory.Uses")) {
149                     assertTrue(es.getSource().equals("vserver"));
150                     assertTrue(es.getTarget().equals("snapshot"));
151                     assertTrue(es.getMultiplicity().equals(EdgeSchema.Multiplicity.ONE_2_ONE));
152                 } else {
153                     assertTrue(false);
154                 }
155             }
156         } catch (Exception ex) {
157             StringWriter writer = new StringWriter();
158             PrintWriter printWriter = new PrintWriter(writer);
159             ex.printStackTrace(printWriter);
160             System.out.println(writer.toString());
161             assertTrue(false);
162         }
163     }
164
165     @Test
166     public void testValidSourceTargetEdge() throws SchemaProviderException {
167         try {
168             OxmSchemaProvider schemaProvider = new OxmSchemaProvider();
169             schemaProvider.loadSchema();
170
171             Set<EdgeSchema> edgeSchemaList = schemaProvider.getEdgeSchemaForSourceTarget("service-instance", "customer",
172                     schemaProvider.getLatestSchemaVersion());
173
174             // Validate edge schema
175             assertTrue(edgeSchemaList.size() == 1);
176             assertTrue(edgeSchemaList.iterator().next().getName().equals("ncso.related-to"));
177             assertTrue(edgeSchemaList.iterator().next().getSource().equals("service-instance"));
178             assertTrue(edgeSchemaList.iterator().next().getTarget().equals("customer"));
179             assertTrue(edgeSchemaList.iterator().next().getMultiplicity().equals(EdgeSchema.Multiplicity.MANY_2_MANY));
180
181             edgeSchemaList = schemaProvider.getEdgeSchemaForSourceTarget("cloud-region", "complex",
182                     schemaProvider.getLatestSchemaVersion());
183
184             // Validate edge schema
185             assertTrue(edgeSchemaList.size() == 2);
186
187             for (EdgeSchema es : edgeSchemaList) {
188                 System.out.println(es.toString());
189                 if (es.getName().equals("org.onap.relationships.inventory.FoundIn")) {
190                     assertTrue(es.getSource().equals("cloud-region"));
191                     assertTrue(es.getTarget().equals("complex"));
192                     assertTrue(es.getMultiplicity().equals(EdgeSchema.Multiplicity.MANY_2_MANY));
193                 } else if (es.getName().equals("org.onap.relationships.inventory.LocatedIn")) {
194                     assertTrue(es.getSource().equals("cloud-region"));
195                     assertTrue(es.getTarget().equals("complex"));
196                     assertTrue(es.getMultiplicity().equals(EdgeSchema.Multiplicity.MANY_2_ONE));
197                 } else {
198                     assertTrue(false);
199                 }
200             }
201
202             edgeSchemaList = schemaProvider.getEdgeSchemaForSourceTarget("cloud-region", "bad-node",
203                     schemaProvider.getLatestSchemaVersion());
204
205             // Validate edge schema
206             assertTrue(edgeSchemaList.size() == 0);
207         } catch (Exception ex) {
208             StringWriter writer = new StringWriter();
209             PrintWriter printWriter = new PrintWriter(writer);
210             ex.printStackTrace(printWriter);
211             System.out.println(writer.toString());
212             assertTrue(false);
213         }
214     }
215
216     @Test
217     public void testInvalidVertexOrEdge() throws SchemaProviderException {
218         try {
219             OxmSchemaProvider schemaProvider = new OxmSchemaProvider();
220             schemaProvider.loadSchema();
221
222             VertexSchema vertSchema =
223                     schemaProvider.getVertexSchema("bad-node", schemaProvider.getLatestSchemaVersion());
224             assertTrue(vertSchema == null);
225
226             EdgeSchema edgeSchema = schemaProvider.getEdgeSchema("org.onap.relationships.inventory.LocatedIn",
227                     "cloud-region", "bad-node", schemaProvider.getLatestSchemaVersion());
228             assertTrue(edgeSchema == null);
229
230             Set<EdgeSchema> edgeSchemaList = schemaProvider.getAdjacentEdgeSchema("org.onap.nodes.bad-node",
231                     schemaProvider.getLatestSchemaVersion());
232             assertTrue(edgeSchemaList.isEmpty());
233         } catch (Exception ex) {
234             StringWriter writer = new StringWriter();
235             PrintWriter printWriter = new PrintWriter(writer);
236             ex.printStackTrace(printWriter);
237             System.out.println(writer.toString());
238             assertTrue(false);
239         }
240     }
241 }