68c876c939670e5c162947f83f23980e1a58d791
[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.TestDao;
40 import org.onap.crud.service.util.TestHeaders;
41 import org.onap.crud.service.util.TestRequest;
42 import org.onap.crud.service.util.TestUriInfo;
43 import org.onap.schema.EdgeRulesLoader;
44
45
46 public class CrudRestServiceTest {
47   private final String putVertexPayload = "{" +
48       "\"id\": \"test-uuid\"," +
49       "\"type\": \"pserver\"," +
50       "\"properties\": {" +
51       "\"fqdn\": \"myhost.onap.com\"," +
52       "\"hostname\": \"myhost\" } }";
53   
54   private final String postVertexPayload = "{" +
55       "\"type\": \"pserver\"," +
56       "\"properties\": {" +
57       "\"fqdn\": \"myhost.onap.com\"," +
58       "\"hostname\": \"myhost\" } }";
59   
60   private final String postMissingPropVertexPayload = "{" +
61       "\"type\": \"pserver\"," +
62       "\"properties\": {" +
63       "\"fqdn\": \"myhost.onap.com\"," +
64       "\"equip-type\": \"box\" } }";
65  
66   private final String postEdgePayload = "{" +
67       "\"type\": \"tosca.relationships.HostedOn\"," +
68       "\"source\": \"services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
69       "\"target\": \"services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908\"," +
70       "\"properties\": {" +
71       "\"prevent-delete\": \"NONE\" } }";
72
73   
74   private CrudRestService mockService;
75   
76   @Rule
77   public ExpectedException thrown = ExpectedException.none();
78
79   @Before
80   public void init() throws Exception {
81     ClassLoader classLoader = getClass().getClassLoader();
82     File dir = new File(classLoader.getResource("model").getFile());
83     System.setProperty("CONFIG_HOME", dir.getParent());
84     EdgeRulesLoader.resetSchemaVersionContext();
85
86     CrudGraphDataService service = new CrudGraphDataService(new TestDao());
87     CrudRestService restService = new CrudRestService(service, null);
88     mockService = Mockito.spy(restService);
89
90     Mockito.doReturn(true).when(mockService).validateRequest(Mockito.any(HttpServletRequest.class),
91         Mockito.anyString(), Mockito.anyString(), Mockito.any(CrudRestService.Action.class), Mockito.anyString(),
92         Mockito.any(HttpHeaders.class));
93   }
94   
95   @Test
96   public void testDelete() throws CrudException {
97     Response response;
98     
99     response = mockService.deleteVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
100         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
101     assertTrue(response.getStatus() == 200);
102     
103         response = mockService.deleteEdge("", "v11", "tosca.relationships.HostedOn",
104                 "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, "v8", "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, "v11", "services/inventory/v11", 
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, "v11", "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, "v8", "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, "v11", "tosca.relationships.HostedOn", "my-uuid", 
200         "services/inventory/v11", 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, "v11", "tosca.relationships.HostedOn", "my-uuid", 
207         "services/inventory/v11", 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, "v11", "", 
319         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
320     System.out.println("Bulk Response: " + response.getStatus() + "\n" + response.getEntity().toString());
321     assertTrue(response.getStatus() == 200);  
322   }
323   
324   public static String readFileToString(File aFile) throws IOException {
325
326     BufferedReader br = new BufferedReader(new FileReader(aFile));
327     try {
328       StringBuilder sb = new StringBuilder();
329       String line = br.readLine();
330
331       while (line != null) {
332         sb.append(line);
333         line = br.readLine();
334       }
335
336       return sb.toString().replaceAll("\\s+", "");
337     } finally {
338       try {
339         br.close();
340       } catch (IOException e) {
341         fail("Unexpected IOException: " + e.getMessage());
342       }
343     }
344   }
345
346 }