Upgrade version of aai-common
[aai/gizmo.git] / src / test / java / org / onap / crud / service / CrudRestServiceTest.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6  * Copyright © 2017-2018 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 package org.onap.crud.service;
22
23 import static org.junit.Assert.assertTrue;
24 import static org.junit.Assert.fail;
25 import java.io.BufferedReader;
26 import java.io.File;
27 import java.io.FileReader;
28 import java.io.IOException;
29 import javax.servlet.http.HttpServletRequest;
30 import javax.ws.rs.core.HttpHeaders;
31 import javax.ws.rs.core.Response;
32 import org.junit.Assert;
33 import org.junit.Before;
34 import org.junit.Rule;
35 import org.junit.Test;
36 import org.junit.rules.ExpectedException;
37 import org.mockito.Mockito;
38 import org.onap.crud.exception.CrudException;
39 import org.onap.crud.service.util.TestHeaders;
40 import org.onap.crud.service.util.TestRequest;
41 import org.onap.crud.service.util.TestUriInfo;
42 import org.onap.schema.EdgeRulesLoader;
43 import org.junit.runner.RunWith;
44 import org.mockito.junit.MockitoJUnitRunner;
45 import org.onap.crud.OXMModelLoaderSetup;
46
47 @RunWith(MockitoJUnitRunner.Silent.class)
48 public class CrudRestServiceTest extends OXMModelLoaderSetup{
49   private final String putVertexPayload = "{" +
50       "\"id\": \"test-uuid\"," +
51       "\"type\": \"pserver\"," +
52       "\"properties\": {" +
53       "\"fqdn\": \"myhost.onap.com\"," +
54       "\"hostname\": \"myhost\" } }";
55
56   private final String postVertexPayload = "{" +
57       "\"type\": \"pserver\"," +
58       "\"properties\": {" +
59       "\"fqdn\": \"myhost.onap.com\"," +
60       "\"hostname\": \"myhost\" } }";
61
62   private final String postMissingPropVertexPayload = "{" +
63       "\"type\": \"pserver\"," +
64       "\"properties\": {" +
65       "\"fqdn\": \"myhost.onap.com\"," +
66       "\"equip-type\": \"box\" } }";
67
68   private final String postEdgePayload = "{" +
69       "\"type\": \"tosca.relationships.HostedOn\"," +
70       "\"source\": \"services/inventory/v11/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
71             "\"target\": \"services/inventory/v11/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908\"," +
72       "\"properties\": {" +
73       "\"prevent-delete\": \"NONE\" } }";
74
75
76   private CrudRestService mockService;
77
78   @Rule
79   public ExpectedException thrown = ExpectedException.none();
80
81   @Before
82   public void init() throws Exception {
83     System.setProperty("CONFIG_HOME", "src/test/resources");
84     EdgeRulesLoader.resetSchemaVersionContext();
85
86     ChampDaoMockTest champDaoTest = new ChampDaoMockTest();
87     CrudGraphDataService service = new CrudGraphDataService(champDaoTest.getChampDao());
88     CrudRestService restService = new CrudRestService(service, null);
89     mockService = Mockito.spy(restService);
90
91     Mockito.doReturn(true).when(mockService).validateRequest(Mockito.any(HttpServletRequest.class),
92         Mockito.anyString(), Mockito.anyString(), Mockito.any(CrudRestService.Action.class), Mockito.anyString(),
93         Mockito.any(HttpHeaders.class));
94   }
95
96   @Test
97   public void testDelete() throws CrudException {
98     Response response;
99
100     response = mockService.deleteVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
101         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
102     assertTrue(response.getStatus() == 200);
103
104     response = mockService.deleteEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
105         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
106     assertTrue(response.getStatus() == 200);
107   }
108
109   @Test
110   public void testAddVertex() throws CrudException {
111     Response response;
112
113         // Cannot find OXM version
114     response = mockService.addVertex(postVertexPayload, "v7", "services/inventory/v8",
115             new TestHeaders(), null, new TestRequest());
116     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
117     assertTrue(response.getStatus() == 500);
118     Assert.assertNull(response.getEntityTag());
119
120     response = mockService.addVertex(postMissingPropVertexPayload, "v11", "services/inventory/v11",
121         new TestHeaders(), null, new TestRequest());
122     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
123     assertTrue(response.getStatus() == 400);
124         Assert.assertNull(response.getEntityTag());
125
126     response = mockService.addVertex(postVertexPayload, "v11", "services/inventory/v11",
127         new TestHeaders(), null, new TestRequest());
128     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
129     assertTrue(response.getStatus() == 201);
130         Assert.assertEquals(response.getEntityTag().getValue(), "test123");
131
132     response = mockService.addVertex(postMissingPropVertexPayload, "v11", "pserver", "services/inventory/v11",
133         new TestHeaders(), null, new TestRequest());
134     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
135     assertTrue(response.getStatus() == 400);
136         Assert.assertNull(response.getEntityTag());
137
138     response = mockService.addVertex(postVertexPayload, "v11", "pserver", "services/inventory/v11",
139         new TestHeaders(), null, new TestRequest());
140     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
141     assertTrue(response.getStatus() == 201);
142         Assert.assertEquals(response.getEntityTag().getValue(), "test123");
143   }
144
145   @Test
146   public void testAddEdge() throws CrudException {
147     Response response;
148
149     response = mockService.addEdge(postEdgePayload, "v9", "services/inventory/v9",
150         new TestHeaders(), null, new TestRequest());
151     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
152     assertTrue(response.getStatus() == 201);
153         Assert.assertEquals(response.getEntityTag().getValue(), "test123");
154
155     response = mockService.addEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "services/inventory/v11",
156         new TestHeaders(), null, new TestRequest());
157     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
158     assertTrue(response.getStatus() == 201);
159         Assert.assertEquals(response.getEntityTag().getValue(), "test123");
160   }
161
162   @Test
163   public void testAddEdgeMultiplicityRules() throws CrudException {
164     Response response;
165
166     response = mockService.addEdge(postEdgePayload, "v10", "services/inventory/v10",
167         new TestHeaders(), null, new TestRequest());
168     Assert.assertEquals("MANY2ONE multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn",
169             response.getEntity().toString());
170     Assert.assertEquals(400, response.getStatus());
171
172     response = mockService.addEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "services/inventory/v9",
173         new TestHeaders(), null, new TestRequest());
174     Assert.assertEquals(201, response.getStatus());
175
176     response = mockService.addEdge(postEdgePayload, "v8", "tosca.relationships.HostedOn", "services/inventory/v8",
177         new TestHeaders(), null, new TestRequest());
178     Assert.assertEquals("ONE2MANY multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn",
179             response.getEntity().toString());
180     Assert.assertEquals(400, response.getStatus());
181   }
182
183   @Test
184   public void testUpdateVertex() throws CrudException {
185     Response response;
186
187         // Cannot find OXM version
188     response = mockService.updateVertex(putVertexPayload, "v7", "pserver", "test-uuid", "services/inventory/v8",
189             new TestHeaders(), null, new TestRequest());
190     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
191     assertTrue(response.getStatus() == 500);
192     Assert.assertNull(response.getEntityTag());
193
194     // Test ID mismatch
195     response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "bad-id",
196         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
197     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
198     assertTrue(response.getStatus() == 400);
199     Assert.assertNull(response.getEntityTag());
200
201     // Success case
202     response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "test-uuid", "services/inventory/v11",
203                 new TestHeaders(), null, new TestRequest());
204     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
205     assertTrue(response.getStatus() == 200);
206         Assert.assertEquals(response.getEntityTag().getValue(), "test123");
207
208     // Patch
209     response = mockService.patchVertex(putVertexPayload, "v11", "pserver", "test-uuid",
210         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
211     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
212     assertTrue(response.getStatus() == 200);
213         Assert.assertEquals(response.getEntityTag().getValue(), "test123");
214   }
215
216   @Test
217   public void testUpdateEdge() throws CrudException {
218     Response response;
219
220     response = mockService.updateEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "my-uuid",
221         "services/inventory/v9", new TestHeaders(), null, new TestRequest());
222     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
223     assertTrue(response.getStatus() == 200);
224         Assert.assertEquals(response.getEntityTag().getValue(), "test123");
225
226     // Patch
227     response = mockService.patchEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "my-uuid",
228         "services/inventory/v9", new TestHeaders(), null, new TestRequest());
229     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
230     assertTrue(response.getStatus() == 200);
231         Assert.assertEquals(response.getEntityTag().getValue(), "test123");
232   }
233
234   @Test
235   public void testGet() throws CrudException {
236     Response response;
237
238     response = mockService.getVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
239         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
240     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
241     assertTrue(response.getStatus() == 200);
242
243     response = mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
244         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
245     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
246     assertTrue(response.getStatus() == 200);
247
248     response = mockService.getVertices("", "v11", "pserver",
249         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
250     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
251     assertTrue(response.getStatus() == 200);
252
253     response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn",
254         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
255     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
256     assertTrue(response.getStatus() == 200);
257   }
258
259   @Test
260   public void testValidRequestHeader() throws CrudException {
261     TestHeaders testHeaders = new TestHeaders();
262     mockService.validateRequestHeader(testHeaders);
263   }
264
265   @Test
266   public void testInvalidRequestHeaderXTransactionId() throws CrudException {
267     thrown.expect(CrudException.class);
268     thrown.expectMessage("Invalid request, Missing X-TransactionId header");
269
270     TestHeaders testHeaders = new TestHeaders();
271     testHeaders.clearRequestHeader("X-TransactionId");
272     mockService.validateRequestHeader(testHeaders);
273   }
274
275   @Test
276   public void testInvalidRequestHeaderXFromAppId() throws CrudException {
277     thrown.expect(CrudException.class);
278     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
279
280     TestHeaders testHeaders = new TestHeaders();
281     testHeaders.clearRequestHeader("X-FromAppId");
282     mockService.validateRequestHeader(testHeaders);
283   }
284
285   @Test
286   public void testRequestHeaderWithMsId() throws CrudException {
287     thrown.expect(CrudException.class);
288     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
289
290     TestHeaders testHeaders = new TestHeaders();
291     testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
292     mockService.validateRequestHeader(testHeaders);
293   }
294
295   @Test
296   public void testEmptyRequestHeader() throws CrudException {
297     thrown.expect(CrudException.class);
298     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
299
300     TestHeaders testHeaders = new TestHeaders();
301     testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
302     mockService.validateRequestHeader(testHeaders);
303   }
304
305   @Test
306     public void testGetMultiOxm() throws CrudException {
307         Response response;
308
309         response = mockService.getVertex("", "v13", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
310                 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
311         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
312         assertTrue(response.getStatus() == 200);
313
314         response =
315                 mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
316                         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
317         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
318         assertTrue(response.getStatus() == 200);
319
320         response = mockService.getVertices("", "v13", "pserver", "services/inventory/v11", new TestHeaders(),
321                 new TestUriInfo(), new TestRequest());
322         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
323         assertTrue(response.getStatus() == 200);
324
325         response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn", "services/inventory/v11",
326                 new TestHeaders(), new TestUriInfo(), new TestRequest());
327         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
328         assertTrue(response.getStatus() == 200);
329     }
330
331   @Test
332   public void testBulk() throws CrudException, IOException {
333     Response response;
334
335     File bulkFile = new File("src/test/resources/payloads/bulk.json");
336     String payloadStr = readFileToString(bulkFile);
337     System.out.println(payloadStr);
338
339     response = mockService.addBulk(payloadStr, "v9", 
340         "services/inventory/v9", new TestHeaders(), null, new TestRequest());
341     System.out.println("Bulk Response: " + response);
342     System.out.println("Response Entity: " + response.getEntity().toString());
343     assertTrue(response.getStatus() == 200);
344   }
345
346   public static String readFileToString(File aFile) throws IOException {
347
348     BufferedReader br = new BufferedReader(new FileReader(aFile));
349     try {
350       StringBuilder sb = new StringBuilder();
351       String line = br.readLine();
352
353       while (line != null) {
354         sb.append(line);
355         line = br.readLine();
356       }
357
358       return sb.toString().replaceAll("\\s+", "");
359     } finally {
360       try {
361         br.close();
362       } catch (IOException e) {
363         fail("Unexpected IOException: " + e.getMessage());
364       }
365     }
366   }
367
368 }