04340a6d8a957f132bbc7ef7363951823981950f
[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 testUpdateVertex() throws CrudException {
164     Response response;
165
166         // Cannot find OXM version
167     response = mockService.updateVertex(putVertexPayload, "v7", "pserver", "test-uuid", "services/inventory/v8",
168             new TestHeaders(), null, new TestRequest());
169     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
170     assertTrue(response.getStatus() == 500);
171     Assert.assertNull(response.getEntityTag());
172
173     // Test ID mismatch
174     response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "bad-id",
175         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
176     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
177     assertTrue(response.getStatus() == 400);
178     Assert.assertNull(response.getEntityTag());
179
180     // Success case
181     response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "test-uuid", "services/inventory/v11",
182                 new TestHeaders(), null, new TestRequest());
183     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
184     assertTrue(response.getStatus() == 200);
185         Assert.assertEquals(response.getEntityTag().getValue(), "test123");
186
187     // Patch
188     response = mockService.patchVertex(putVertexPayload, "v11", "pserver", "test-uuid",
189         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
190     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
191     assertTrue(response.getStatus() == 200);
192         Assert.assertEquals(response.getEntityTag().getValue(), "test123");
193   }
194
195   @Test
196   public void testUpdateEdge() throws CrudException {
197     Response response;
198
199     response = mockService.updateEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "my-uuid",
200         "services/inventory/v9", new TestHeaders(), null, new TestRequest());
201     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
202     assertTrue(response.getStatus() == 200);
203         Assert.assertEquals(response.getEntityTag().getValue(), "test123");
204
205     // Patch
206     response = mockService.patchEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "my-uuid",
207         "services/inventory/v9", new TestHeaders(), null, new TestRequest());
208     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
209     assertTrue(response.getStatus() == 200);
210         Assert.assertEquals(response.getEntityTag().getValue(), "test123");
211   }
212
213   @Test
214   public void testGet() throws CrudException {
215     Response response;
216
217     response = mockService.getVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
218         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
219     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
220     assertTrue(response.getStatus() == 200);
221
222     response = mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
223         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
224     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
225     assertTrue(response.getStatus() == 200);
226
227     response = mockService.getVertices("", "v11", "pserver",
228         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
229     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
230     assertTrue(response.getStatus() == 200);
231
232     response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn",
233         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
234     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
235     assertTrue(response.getStatus() == 200);
236   }
237
238   @Test
239   public void testValidRequestHeader() throws CrudException {
240     TestHeaders testHeaders = new TestHeaders();
241     mockService.validateRequestHeader(testHeaders);
242   }
243
244   @Test
245   public void testInvalidRequestHeaderXTransactionId() throws CrudException {
246     thrown.expect(CrudException.class);
247     thrown.expectMessage("Invalid request, Missing X-TransactionId header");
248
249     TestHeaders testHeaders = new TestHeaders();
250     testHeaders.clearRequestHeader("X-TransactionId");
251     mockService.validateRequestHeader(testHeaders);
252   }
253
254   @Test
255   public void testInvalidRequestHeaderXFromAppId() throws CrudException {
256     thrown.expect(CrudException.class);
257     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
258
259     TestHeaders testHeaders = new TestHeaders();
260     testHeaders.clearRequestHeader("X-FromAppId");
261     mockService.validateRequestHeader(testHeaders);
262   }
263
264   @Test
265   public void testRequestHeaderWithMsId() throws CrudException {
266     thrown.expect(CrudException.class);
267     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
268
269     TestHeaders testHeaders = new TestHeaders();
270     testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
271     mockService.validateRequestHeader(testHeaders);
272   }
273
274   @Test
275   public void testEmptyRequestHeader() throws CrudException {
276     thrown.expect(CrudException.class);
277     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
278
279     TestHeaders testHeaders = new TestHeaders();
280     testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
281     mockService.validateRequestHeader(testHeaders);
282   }
283
284   @Test
285     public void testGetMultiOxm() throws CrudException {
286         Response response;
287
288         response = mockService.getVertex("", "v13", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
289                 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
290         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
291         assertTrue(response.getStatus() == 200);
292
293         response =
294                 mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
295                         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
296         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
297         assertTrue(response.getStatus() == 200);
298
299         response = mockService.getVertices("", "v13", "pserver", "services/inventory/v11", new TestHeaders(),
300                 new TestUriInfo(), new TestRequest());
301         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
302         assertTrue(response.getStatus() == 200);
303
304         response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn", "services/inventory/v11",
305                 new TestHeaders(), new TestUriInfo(), new TestRequest());
306         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
307         assertTrue(response.getStatus() == 200);
308     }
309
310   @Test
311   public void testBulk() throws CrudException, IOException {
312     Response response;
313
314     File bulkFile = new File("src/test/resources/payloads/bulk.json");
315     String payloadStr = readFileToString(bulkFile);
316     System.out.println(payloadStr);
317
318     response = mockService.addBulk(payloadStr, "v9", 
319         "services/inventory/v9", new TestHeaders(), null, new TestRequest());
320     System.out.println("Bulk Response: " + response);
321     System.out.println("Response Entity: " + response.getEntity().toString());
322     assertTrue(response.getStatus() == 200);
323   }
324
325   public static String readFileToString(File aFile) throws IOException {
326
327     BufferedReader br = new BufferedReader(new FileReader(aFile));
328     try {
329       StringBuilder sb = new StringBuilder();
330       String line = br.readLine();
331
332       while (line != null) {
333         sb.append(line);
334         line = br.readLine();
335       }
336
337       return sb.toString().replaceAll("\\s+", "");
338     } finally {
339       try {
340         br.close();
341       } catch (IOException e) {
342         fail("Unexpected IOException: " + e.getMessage());
343       }
344     }
345   }
346
347 }