0e33f6c7e3cd4dd80ebec8fc82fca18423598377
[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(AAIProperties.AAI_URI, "/network/pnfs/pnf/my-pnf")
90             .property("model-invariant-id", "key1")
91             .as("v1")
92             .addV("owning-entity")
93             .property("aai-node-type", "owning-entity")
94             .property("owning-entity-name", "OE-Generic")
95             .property("owning-entity-id", "367c897c-8cec-47ba-b7f5-4b6139f06691")
96             .property(AAIProperties.AAI_URI,"/network/pnfs/pnf/my-pnf/business/owning-entities/owning-entity/367c897c-8cec-47ba-b7f5-4b6139f06691")
97             .as("oe")
98             .addE("org.onap.relationships.inventory.BelongsTo").to("v1").from("oe")
99             .property(EdgeProperty.CONTAINS.toString(), true)
100             .addV("model-ver")
101             .property("aai-node-type", "model-ver")
102             .property("model-ver", "myValue")
103             .property("model-version-id", "key2")
104             .property("model-version", "testValue")
105             .property(AAIProperties.AAI_URI, "/network/pnfs/pnf/my-pnf/model-vers/model-ver/key2")
106             .as("v2")
107             .addE("org.onap.relationships.inventory.BelongsTo").to("v1").from("v2")
108             .property(EdgeProperty.CONTAINS.toString(), true)
109             .addV("model")
110             .property("aai-node-type", "model")
111             .property("model-invariant-id", "key3")
112             .property(AAIProperties.AAI_URI, "/service-design-and-creation/models/model/key3")
113             .as("v3")
114             .addV()
115             .property("aai-node-type", "model-ver")
116             .property("model-ver", "myValue")
117             .property("model-version-id", "key4")
118             .property(AAIProperties.AAI_URI, "/service-design-and-creation/models/model/key3/model-vers/model-ver/key4")
119             .as("v4")
120             .addE("org.onap.relationships.inventory.BelongsTo").to("v3").from("v4")
121             .property(EdgeProperty.CONTAINS.toString(), true)
122             .next();
123         graph.tx().commit();
124     }
125
126     @AfterClass
127     public static void tearDown() {
128         graph.tx().rollback();
129         graph.close();
130     }
131
132     @Before
133     public void initMock() {
134         loader = loaderFactory.createLoaderForVersion(introspectorFactoryType, schemaVersions.getDefaultVersion());
135         MockitoAnnotations.initMocks(this);
136         dbEngine = new JanusGraphDBEngine(queryStyle, loader);
137     }
138
139     @Test
140     public void shouldFailComparisonWithDiffOwningEntity() throws Exception  {
141
142         final Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
143         final Introspector obj = loader.introspectorFromName("pnf");
144         obj.setValue("pnf-name", "my-pnf");
145         obj.setValue("model-invariant-id", "key1");
146         obj.setValue("model-version-id", "key2");
147         //obj.setValue("owning-entity-id", "367c897c-8cec-47ba-b7f5-4b6139f06691");
148         TransactionalGraphEngine spy = spy(dbEngine);
149         TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin());
150         Graph g = graph.newTransaction();
151         GraphTraversalSource traversal = g.traversal();
152         when(spy.asAdmin()).thenReturn(adminSpy);
153         when(adminSpy.getTraversalSource()).thenReturn(traversal);
154         DBSerializer serializer =
155                 new DBSerializer(schemaVersions.getDefaultVersion(),
156                     spy, introspectorFactoryType,
157                     "AAI_TEST", new HashSet<>(Arrays.asList("OE-GenericI", "OE-GenericII")));
158
159         Vertex selfV = g.traversal().V().has("aai-node-type", "pnf").next();
160
161         OwnerCheck ownerCheck = new OwnerCheck(obj, selfV, spy, serializer);
162
163         thrown.expect(AAIException.class);
164         thrown.expectMessage("Group(s) :[OE-GenericI, OE-GenericII] not authorized to perform function");
165         ownerCheck.execute();
166         g.tx().rollback();
167
168     }
169
170     @Test
171     public void shouldPassIfOwningEntityEqual() throws Exception  {
172
173         final Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
174         final Introspector obj = loader.introspectorFromName("pnf");
175         obj.setValue("pnf-name", "my-pnf");
176         obj.setValue("model-invariant-id", "key1");
177         obj.setValue("model-version-id", "key2");
178         //obj.setValue("owning-entity-id", "367c897c-8cec-47ba-b7f5-4b6139f06691");
179         TransactionalGraphEngine spy = spy(dbEngine);
180         TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin());
181         Graph g = graph.newTransaction();
182         GraphTraversalSource traversal = g.traversal();
183         when(spy.tx()).thenReturn(g);
184         when(spy.asAdmin()).thenReturn(adminSpy);
185         when(adminSpy.getTraversalSource()).thenReturn(traversal);
186
187         Vertex selfV = g.traversal().V().has("aai-node-type", "pnf").next();
188
189         DBSerializer serializer =
190             new DBSerializer(schemaVersions.getDefaultVersion(),
191                 spy, introspectorFactoryType,
192                 "AAI_TEST", new HashSet<>(Arrays.asList("OE-Generic", "OE-GenericII")));
193
194         OwnerCheck ownerCheck = new OwnerCheck(obj, selfV, spy, serializer);
195
196         ownerCheck.execute();
197
198
199         g.tx().rollback();
200     }
201
202     @Test
203     public void shouldPassIfUserOwningEntityEmptyl() throws Exception  {
204
205         final Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
206         final Introspector obj = loader.introspectorFromName("pnf");
207         obj.setValue("pnf-name", "my-pnf");
208         obj.setValue("model-invariant-id", "key1");
209         obj.setValue("model-version-id", "key2");
210         //obj.setValue("owning-entity-id", "367c897c-8cec-47ba-b7f5-4b6139f06691");
211         TransactionalGraphEngine spy = spy(dbEngine);
212         TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin());
213         Graph g = graph.newTransaction();
214         GraphTraversalSource traversal = g.traversal();
215         when(spy.asAdmin()).thenReturn(adminSpy);
216         when(adminSpy.getTraversalSource()).thenReturn(traversal);
217         DBSerializer serializer =
218             new DBSerializer(schemaVersions.getDefaultVersion(),
219                 spy, introspectorFactoryType,
220                 "AAI_TEST");
221
222         Vertex selfV = g.traversal().V().has("aai-node-type", "pnf").next();
223
224         OwnerCheck ownerCheck = new OwnerCheck(obj, selfV, spy, serializer);
225
226         ownerCheck.execute();
227         g.tx().rollback();
228     }
229 }