Reduce the number of problems in aai-common by removing unused imports
[aai/aai-common.git] / aai-core / src / test / java / org / onap / aai / serialization / db / ImpliedDeleteUnitTest.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.serialization.db;
22
23 import java.io.UnsupportedEncodingException;
24 import java.util.ArrayList;
25 import java.util.List;
26
27 import org.apache.tinkerpop.gremlin.structure.Vertex;
28 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
29 import org.hamcrest.CoreMatchers;
30 import org.junit.Before;
31 import org.junit.Rule;
32 import org.junit.Test;
33 import org.mockito.Mockito;
34 import org.onap.aai.exceptions.AAIException;
35 import org.onap.aai.introspection.Introspector;
36 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
37 import org.onap.aai.serialization.engines.query.QueryEngine;
38 import org.onap.aai.util.AAIConstants;
39 import org.springframework.boot.test.rule.OutputCapture;
40
41 public class ImpliedDeleteUnitTest {
42
43     private TransactionalGraphEngine mockEngine;
44     private DBSerializer mockSerializer;
45
46     private ImpliedDelete impliedDelete;
47
48     @Rule
49     public final OutputCapture outputCapture = new OutputCapture();
50
51     @Before
52     public void setup() {
53         mockEngine = Mockito.mock(TransactionalGraphEngine.class);
54         mockSerializer = Mockito.mock(DBSerializer.class);
55         impliedDelete = Mockito.spy(new ImpliedDelete(mockEngine, mockSerializer));
56     }
57
58     // aai.implied.delete.whitelist.sdnc=*
59     @Test
60     public void testImpliedDeleteWhenUserIsAllowedToInvokeAnyMethod() throws AAIException {
61
62         QueryEngine mockQueryEngine = Mockito.mock(QueryEngine.class);
63
64         Mockito.doReturn("*").when(impliedDelete).get(AAIConstants.AAI_IMPLIED_DELETE_WHITELIST + "sdnc", "");
65
66         Mockito.when(mockEngine.getQueryEngine()).thenReturn(mockQueryEngine);
67
68         TinkerGraph graph = TinkerGraph.open();
69
70         Vertex vserver = graph.addVertex("vertex");
71         vserver.property("vserver-id", "some-id");
72
73         Vertex volume = graph.addVertex("vertex");
74         volume.property("volume-id", "some-id");
75
76         List<Vertex> vertices = new ArrayList<>();
77         vertices.add(volume);
78
79         impliedDelete.execute(vserver.id(), "SDNC", "vserver", vertices);
80
81     }
82
83     // aai.implied.delete.whitelist.sdnc='vserver'
84     @Test
85     public void testImpliedDeleteWhenUserIsAllowedToInvokeCertainMethod() throws AAIException {
86
87         QueryEngine mockQueryEngine = Mockito.mock(QueryEngine.class);
88
89         Mockito.doReturn("'vserver'").when(impliedDelete).get(AAIConstants.AAI_IMPLIED_DELETE_WHITELIST + "sdnc", "");
90
91         Mockito.when(mockEngine.getQueryEngine()).thenReturn(mockQueryEngine);
92
93         TinkerGraph graph = TinkerGraph.open();
94
95         Vertex vserver = graph.addVertex("vertex");
96         vserver.property("vserver-id", "some-id");
97
98         Vertex volume = graph.addVertex("vertex");
99         volume.property("volume-id", "some-id");
100
101         List<Vertex> vertices = new ArrayList<>();
102         vertices.add(volume);
103
104         impliedDelete.execute(vserver.id(), "SDNC", "vserver", vertices);
105     }
106
107     // aai.implied.delete.whitelist.sdnc='vserver'
108     @Test
109     public void testImpliedDeleteWhenUserIsAllowedAndTryVariationsOfSOTValueSDNC() throws AAIException {
110
111         QueryEngine mockQueryEngine = Mockito.mock(QueryEngine.class);
112
113         Mockito.doReturn("'vserver'").when(impliedDelete).get(AAIConstants.AAI_IMPLIED_DELETE_WHITELIST + "sdnc", "");
114
115         Mockito.when(mockEngine.getQueryEngine()).thenReturn(mockQueryEngine);
116
117         TinkerGraph graph = TinkerGraph.open();
118
119         Vertex vserver = graph.addVertex("vertex");
120         vserver.property("vserver-id", "some-id");
121
122         Vertex volume = graph.addVertex("vertex");
123         volume.property("volume-id", "some-id");
124
125         List<Vertex> vertices = new ArrayList<>();
126         vertices.add(volume);
127
128         impliedDelete.execute(vserver.id(), "SDNC", "vserver", vertices);
129         impliedDelete.execute(vserver.id(), "sDNC", "vserver", vertices);
130         impliedDelete.execute(vserver.id(), "sdNC", "vserver", vertices);
131         impliedDelete.execute(vserver.id(), "sdnC", "vserver", vertices);
132         impliedDelete.execute(vserver.id(), "sdnc", "vserver", vertices);
133     }
134
135     // aai.implied.delete.whitelist.sdnc='vserver','vce','pserver'
136     @Test
137     public void testImpliedDeleteWhenUserIsAllowedToInvokeMultipleMethods() throws AAIException {
138
139         QueryEngine mockQueryEngine = Mockito.mock(QueryEngine.class);
140
141         Mockito.doReturn("'vce','pserver','vserver','cloud-region'").when(impliedDelete)
142                 .get(AAIConstants.AAI_IMPLIED_DELETE_WHITELIST + "sdnc", "");
143
144         Mockito.when(mockEngine.getQueryEngine()).thenReturn(mockQueryEngine);
145
146         TinkerGraph graph = TinkerGraph.open();
147
148         Vertex vserver = graph.addVertex("vertex");
149         vserver.property("vserver-id", "some-id");
150
151         Vertex volume = graph.addVertex("vertex");
152         volume.property("volume-id", "some-id");
153
154         List<Vertex> vertices = new ArrayList<>();
155         vertices.add(volume);
156
157         impliedDelete.execute(vserver.id(), "SDNC", "vserver", vertices);
158     }
159
160     // aai.implied.delete.whitelist.sdnc='vserver','vce','pserver'
161     @Test
162     public void testImpliedDeleteWhenUserIsAllowedToInvokeMultipleMethodsAndDeletableReturnsMultipleVertexes()
163             throws AAIException, UnsupportedEncodingException {
164
165         QueryEngine mockQueryEngine = Mockito.mock(QueryEngine.class);
166
167         // On a spy the syntax should be doReturn => when => method to spy
168         // On a mock the syntax should be when => thenReturn|thenAnswer
169         Mockito.doReturn("'vserver'").when(impliedDelete).get(AAIConstants.AAI_IMPLIED_DELETE_WHITELIST + "sdnc", "");
170
171         Introspector mockIntrospector = Mockito.mock(Introspector.class);
172
173         Mockito.when(mockEngine.getQueryEngine()).thenReturn(mockQueryEngine);
174
175         TinkerGraph graph = TinkerGraph.open();
176
177         Vertex vserver = graph.addVertex("vertex");
178         vserver.property("vserver-id", "some-id");
179
180         Vertex volume1 = graph.addVertex("vertex");
181         volume1.property("volume-id", "volume-1");
182
183         Vertex volume2 = graph.addVertex("vertex");
184         volume1.property("volume-id", "volume-2");
185
186         Vertex volume3 = graph.addVertex("vertex");
187         volume1.property("volume-id", "volume-3");
188
189         Vertex volume4 = graph.addVertex("vertex");
190         volume1.property("volume-id", "volume-4");
191
192         List<Vertex> vertices = new ArrayList<>();
193
194         vertices.add(volume1);
195         vertices.add(volume2);
196         vertices.add(volume3);
197         vertices.add(volume4);
198
199         Mockito.when(mockQueryEngine.findDeletable(Mockito.anyList())).thenReturn(vertices);
200
201         Mockito.when(mockSerializer.getLatestVersionView(Mockito.anyObject())).thenReturn(mockIntrospector);
202
203         Mockito.when(mockIntrospector.marshal(false)).thenReturn("{\"volume-id\":\"volume-1\"}")
204                 .thenReturn("{\"volume-id\":\"volume-2\"}").thenReturn("{\"volume-id\":\"volume-3\"}")
205                 .thenReturn("{\"volume-id\":\"volume-4\"}");
206
207         impliedDelete.execute(vserver.id(), "SDNC", "vserver", vertices);
208     }
209
210     // aai.implied.delete.whitelist.sdnc=
211     @Test(expected = AAIException.class)
212     public void testImpliedDeleteWhenUserIsNotAllowedToDelete() throws AAIException {
213
214         QueryEngine mockQueryEngine = Mockito.mock(QueryEngine.class);
215
216         Mockito.doReturn("").when(impliedDelete).get(AAIConstants.AAI_IMPLIED_DELETE_WHITELIST + "sdnc", "");
217
218         Mockito.when(mockEngine.getQueryEngine()).thenReturn(mockQueryEngine);
219
220         TinkerGraph graph = TinkerGraph.open();
221
222         Vertex vserver = graph.addVertex("vertex");
223         vserver.property("vserver-id", "some-id");
224
225         Vertex volume = graph.addVertex("vertex");
226         volume.property("volume-id", "some-id");
227
228         List<Vertex> vertices = new ArrayList<>();
229         vertices.add(volume);
230
231         impliedDelete.execute(vserver.id(), "SDNC", "vserver", vertices);
232     }
233
234     // aai.implied.delete.whitelist.sdnc='vce'
235     @Test(expected = AAIException.class)
236     public void testImpliedDeleteWhenUserIsAllowedToDeleteVceChildrenButRequestedToDeleteVserverChildren()
237             throws AAIException {
238
239         QueryEngine mockQueryEngine = Mockito.mock(QueryEngine.class);
240
241         Mockito.doReturn("'vce'").when(impliedDelete).get(AAIConstants.AAI_IMPLIED_DELETE_WHITELIST + "sdnc", "");
242
243         Mockito.when(mockEngine.getQueryEngine()).thenReturn(mockQueryEngine);
244
245         TinkerGraph graph = TinkerGraph.open();
246
247         Vertex vserver = graph.addVertex("vertex");
248         vserver.property("vserver-id", "some-id");
249
250         Vertex volume = graph.addVertex("vertex");
251         volume.property("volume-id", "some-id");
252
253         List<Vertex> vertices = new ArrayList<>();
254         vertices.add(volume);
255
256         impliedDelete.execute(vserver.id(), "SDNC", "vserver", vertices);
257     }
258
259     @Test
260     public void testImpliedDeleteWhenUserIsAllowedToDeleteAndPrintingDeletingVertexItThrowsExceptionVerifyLog()
261             throws AAIException, UnsupportedEncodingException {
262
263         QueryEngine mockQueryEngine = Mockito.mock(QueryEngine.class);
264
265         // On a spy the syntax should be doReturn => when => method to spy
266         // On a mock the syntax should be when => thenReturn|thenAnswer
267         Mockito.doReturn("'vserver'").when(impliedDelete).get(AAIConstants.AAI_IMPLIED_DELETE_WHITELIST + "sdnc", "");
268
269         Introspector mockIntrospector = Mockito.mock(Introspector.class);
270
271         Mockito.when(mockEngine.getQueryEngine()).thenReturn(mockQueryEngine);
272
273         TinkerGraph graph = TinkerGraph.open();
274
275         Vertex vserver = graph.addVertex("vertex");
276         vserver.property("vserver-id", "some-id");
277
278         Vertex volume1 = graph.addVertex("vertex");
279         volume1.property("volume-id", "volume-1");
280
281         List<Vertex> vertices = new ArrayList<>();
282
283         vertices.add(volume1);
284
285         Mockito.when(mockQueryEngine.findDeletable(Mockito.anyList())).thenReturn(vertices);
286
287         Mockito.when(mockSerializer.getLatestVersionView(Mockito.anyObject()))
288                 .thenThrow(new RuntimeException("Unable to find node"));
289
290         impliedDelete.execute(vserver.id(), "SDNC", "vserver", vertices);
291
292         outputCapture.expect(CoreMatchers.containsString(
293                 "Encountered an exception during retrieval of vertex properties with vertex-id " + vserver.id()));
294     }
295 }