Use data owner attribute instead of owning entity for OwnerCheck
[aai/aai-common.git] / aai-core / src / test / java / org / onap / aai / introspection / sideeffect / OwnerCheckTest.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *    http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.aai.introspection.sideeffect;
22
23 import static org.mockito.Mockito.spy;
24 import static org.mockito.Mockito.when;
25
26 import java.util.Arrays;
27 import java.util.Collection;
28 import java.util.Collections;
29 import java.util.HashSet;
30 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
31 import org.apache.tinkerpop.gremlin.structure.Graph;
32 import org.apache.tinkerpop.gremlin.structure.Vertex;
33 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
34 import org.janusgraph.core.JanusGraph;
35 import org.janusgraph.core.JanusGraphFactory;
36 import org.junit.AfterClass;
37 import org.junit.Before;
38 import org.junit.BeforeClass;
39 import org.junit.Rule;
40 import org.junit.Test;
41 import org.junit.rules.ExpectedException;
42 import org.junit.runner.RunWith;
43 import org.junit.runners.Parameterized;
44 import org.mockito.Mock;
45 import org.mockito.MockitoAnnotations;
46 import org.onap.aai.AAISetup;
47 import org.onap.aai.db.props.AAIProperties;
48 import org.onap.aai.edges.enums.EdgeProperty;
49 import org.onap.aai.exceptions.AAIException;
50 import org.onap.aai.introspection.Introspector;
51 import org.onap.aai.introspection.Loader;
52 import org.onap.aai.introspection.ModelType;
53 import org.onap.aai.parsers.query.QueryParser;
54 import org.onap.aai.serialization.db.DBSerializer;
55 import org.onap.aai.serialization.engines.JanusGraphDBEngine;
56 import org.onap.aai.serialization.engines.QueryStyle;
57 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
58
59 @RunWith(value = Parameterized.class)
60
61 public class OwnerCheckTest extends AAISetup {
62
63     private static JanusGraph graph;
64     private final static ModelType introspectorFactoryType = ModelType.MOXY;
65     private static Loader loader;
66     private static TransactionalGraphEngine dbEngine;
67
68     @Rule
69     public ExpectedException thrown = ExpectedException.none();
70
71     @Parameterized.Parameter
72     public QueryStyle queryStyle;
73
74     @Parameterized.Parameters(name = "QueryStyle.{0}")
75     public static Collection<Object[]> data() {
76         return Arrays.asList(new Object[][] {{QueryStyle.TRAVERSAL}, {QueryStyle.TRAVERSAL_URI}});
77     }
78
79     @BeforeClass
80     public static void setup() {
81         graph = JanusGraphFactory.build().set("storage.backend", "inmemory").open();
82         System.setProperty("AJSC_HOME", ".");
83         System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local");
84
85         graph.traversal()
86             .addV("pnf")
87             .property("aai-node-type", "pnf")
88             .property("pnf-name", "my-pnf")
89             .property("data-owner", "Operator")
90             .property(AAIProperties.AAI_URI, "/network/pnfs/pnf/my-pnf")
91             .property("model-invariant-id", "key1")
92             .as("v1")
93             .property(EdgeProperty.CONTAINS.toString(), true)
94             .addV("model-ver")
95             .property("aai-node-type", "model-ver")
96             .property("model-ver", "myValue")
97             .property("model-version-id", "key2")
98             .property("model-version", "testValue")
99             .property(AAIProperties.AAI_URI, "/network/pnfs/pnf/my-pnf/model-vers/model-ver/key2")
100             .as("v2")
101             .addE("org.onap.relationships.inventory.BelongsTo").to("v1").from("v2")
102             .property(EdgeProperty.CONTAINS.toString(), true)
103             .addV("model")
104             .property("aai-node-type", "model")
105             .property("model-invariant-id", "key3")
106             .property(AAIProperties.AAI_URI, "/service-design-and-creation/models/model/key3")
107             .as("v3")
108             .addV()
109             .property("aai-node-type", "model-ver")
110             .property("model-ver", "myValue")
111             .property("model-version-id", "key4")
112             .property(AAIProperties.AAI_URI, "/service-design-and-creation/models/model/key3/model-vers/model-ver/key4")
113             .as("v4")
114             .addE("org.onap.relationships.inventory.BelongsTo").to("v3").from("v4")
115             .property(EdgeProperty.CONTAINS.toString(), true)
116             .next();
117         graph.tx().commit();
118     }
119
120     @AfterClass
121     public static void tearDown() {
122         graph.tx().rollback();
123         graph.close();
124     }
125
126     @Before
127     public void initMock() {
128         loader = loaderFactory.createLoaderForVersion(introspectorFactoryType, schemaVersions.getDefaultVersion());
129         MockitoAnnotations.initMocks(this);
130         dbEngine = new JanusGraphDBEngine(queryStyle, loader);
131     }
132
133     @Test
134     public void shouldFailIfGroupsNotContainsDataOwner() throws Exception  {
135
136         final Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
137         final Introspector obj = loader.introspectorFromName("pnf");
138         obj.setValue("pnf-name", "my-pnf");
139         obj.setValue("model-invariant-id", "key1");
140         obj.setValue("model-version-id", "key2");
141         TransactionalGraphEngine spy = spy(dbEngine);
142         TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin());
143         Graph g = graph.newTransaction();
144         GraphTraversalSource traversal = g.traversal();
145         when(spy.asAdmin()).thenReturn(adminSpy);
146         when(adminSpy.getTraversalSource()).thenReturn(traversal);
147         DBSerializer serializer =
148             new DBSerializer(schemaVersions.getDefaultVersion(),
149                 spy, introspectorFactoryType,
150                 "AAI_TEST", new HashSet<>(Arrays.asList("OperatorI", "OperatorII")));
151
152         Vertex selfV = g.traversal().V().has("aai-node-type", "pnf").next();
153
154         OwnerCheck ownerCheck = new OwnerCheck(obj, selfV, spy, serializer);
155
156         thrown.expect(AAIException.class);
157         thrown.expectMessage("Group(s) :[OperatorII, OperatorI] not authorized to perform function");
158         ownerCheck.execute();
159         g.tx().rollback();
160
161     }
162
163     @Test
164     public void shouldPassIfGroupsContainsDataOwner() throws Exception  {
165
166         final Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
167         final Introspector obj = loader.introspectorFromName("pnf");
168         obj.setValue("pnf-name", "my-pnf");
169         obj.setValue("model-invariant-id", "key1");
170         obj.setValue("model-version-id", "key2");
171         TransactionalGraphEngine spy = spy(dbEngine);
172         TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin());
173         Graph g = graph.newTransaction();
174         GraphTraversalSource traversal = g.traversal();
175         when(spy.tx()).thenReturn(g);
176         when(spy.asAdmin()).thenReturn(adminSpy);
177         when(adminSpy.getTraversalSource()).thenReturn(traversal);
178
179         Vertex selfV = g.traversal().V().has("aai-node-type", "pnf").next();
180
181         DBSerializer serializer =
182             new DBSerializer(schemaVersions.getDefaultVersion(),
183                 spy, introspectorFactoryType,
184                 "AAI_TEST", new HashSet<>(Arrays.asList("OperatorIII", "Operator")));
185
186         OwnerCheck ownerCheck = new OwnerCheck(obj, selfV, spy, serializer);
187
188         ownerCheck.execute();
189         g.tx().rollback();
190     }
191
192     @Test
193     public void shouldPassIfGroupsIsEmpty() throws Exception  {
194
195         final Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
196         final Introspector obj = loader.introspectorFromName("pnf");
197         obj.setValue("pnf-name", "my-pnf");
198         obj.setValue("model-invariant-id", "key1");
199         obj.setValue("model-version-id", "key2");
200         TransactionalGraphEngine spy = spy(dbEngine);
201         TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin());
202         Graph g = graph.newTransaction();
203         GraphTraversalSource traversal = g.traversal();
204         when(spy.asAdmin()).thenReturn(adminSpy);
205         when(adminSpy.getTraversalSource()).thenReturn(traversal);
206         DBSerializer serializer =
207             new DBSerializer(schemaVersions.getDefaultVersion(),
208                 spy, introspectorFactoryType,
209                 "AAI_TEST");
210
211         Vertex selfV = g.traversal().V().has("aai-node-type", "pnf").next();
212
213         OwnerCheck ownerCheck = new OwnerCheck(obj, selfV, spy, serializer);
214
215         ownerCheck.execute();
216         g.tx().rollback();
217     }
218
219     @Test
220     public void shouldPassIfDataOwnerIsNull() throws Exception  {
221
222         final Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
223         final Introspector obj = loader.introspectorFromName("pnf");
224         obj.setValue("pnf-name", "my-pnf");
225         obj.setValue("model-invariant-id", "key1");
226         obj.setValue("model-version-id", "key2");
227         obj.setValue("data-owner", null);
228         TransactionalGraphEngine spy = spy(dbEngine);
229         TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin());
230         Graph g = graph.newTransaction();
231         GraphTraversalSource traversal = g.traversal();
232         when(spy.asAdmin()).thenReturn(adminSpy);
233         when(adminSpy.getTraversalSource()).thenReturn(traversal);
234         DBSerializer serializer =
235             new DBSerializer(schemaVersions.getDefaultVersion(),
236                 spy, introspectorFactoryType,
237                 "AAI_TEST");
238
239         Vertex selfV = g.traversal().V().has("aai-node-type", "pnf").next();
240
241         OwnerCheck ownerCheck = new OwnerCheck(obj, selfV, spy, serializer);
242
243         ownerCheck.execute();
244         g.tx().rollback();
245     }
246
247     @Test
248     public void shouldPassIfDataOwnerIsEmpty() throws Exception  {
249
250         final Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
251         final Introspector obj = loader.introspectorFromName("pnf");
252         obj.setValue("pnf-name", "my-pnf");
253         obj.setValue("model-invariant-id", "key1");
254         obj.setValue("model-version-id", "key2");
255         obj.setValue("data-owner", "");
256         TransactionalGraphEngine spy = spy(dbEngine);
257         TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin());
258         Graph g = graph.newTransaction();
259         GraphTraversalSource traversal = g.traversal();
260         when(spy.asAdmin()).thenReturn(adminSpy);
261         when(adminSpy.getTraversalSource()).thenReturn(traversal);
262         DBSerializer serializer =
263             new DBSerializer(schemaVersions.getDefaultVersion(),
264                 spy, introspectorFactoryType,
265                 "AAI_TEST");
266
267         Vertex selfV = g.traversal().V().has("aai-node-type", "pnf").next();
268
269         OwnerCheck ownerCheck = new OwnerCheck(obj, selfV, spy, serializer);
270
271         ownerCheck.execute();
272         g.tx().rollback();
273     }
274 }