Gizmo to load multiple Db Edge Rules files
[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 java.nio.file.Path;
30 import java.nio.file.Paths;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.ws.rs.core.HttpHeaders;
33 import javax.ws.rs.core.Response;
34 import org.junit.Assert;
35 import org.junit.Before;
36 import org.junit.Rule;
37 import org.junit.Test;
38 import org.junit.rules.ExpectedException;
39 import org.mockito.Mockito;
40 import org.onap.crud.dao.TestDao;
41 import org.onap.crud.exception.CrudException;
42 import org.onap.crud.service.util.TestHeaders;
43 import org.onap.crud.service.util.TestRequest;
44 import org.onap.crud.service.util.TestUriInfo;
45 import org.onap.schema.EdgeRulesLoader;
46
47
48 public class CrudRestServiceTest {
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/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
71       "\"target\": \"services/inventory/v12/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       Path resourcePath = Paths.get(ClassLoader.getSystemResource("model").toURI());
84       Path parentPath = resourcePath.getParent();
85
86       System.setProperty("CONFIG_HOME", parentPath.toString());
87     EdgeRulesLoader.resetSchemaVersionContext ();
88       CrudGraphDataService service = new CrudGraphDataService(new TestDao());
89       CrudRestService restService = new CrudRestService(service, null);
90       mockService = Mockito.spy(restService);
91       
92       Mockito.doReturn(true).when(mockService).validateRequest(Mockito.any(HttpServletRequest.class), 
93           Mockito.anyString(), Mockito.anyString(), Mockito.any(CrudRestService.Action.class), Mockito.anyString(), 
94           Mockito.any(HttpHeaders.class));
95   }
96   
97   @Test
98   public void testDelete() throws CrudException {
99     Response response;
100     
101     response = mockService.deleteVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
102         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
103     assertTrue(response.getStatus() == 200);
104     
105         response = mockService.deleteEdge("", "v11", "tosca.relationships.HostedOn",
106                 "872dd5df-0be9-4167-95e9-2cf4b21165ed",
107         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
108     assertTrue(response.getStatus() == 200);
109   }
110   
111   @Test
112   public void testAddVertex() throws CrudException {
113     Response response;
114     
115         // Cannot find OXM version
116     response = mockService.addVertex(postVertexPayload, "v8", "services/inventory/v8",
117             new TestHeaders(), null, new TestRequest());
118     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
119     assertTrue(response.getStatus() == 500);
120     Assert.assertNull(response.getEntityTag());
121         
122     response = mockService.addVertex(postMissingPropVertexPayload, "v11", "services/inventory/v11", 
123         new TestHeaders(), null, new TestRequest());
124     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
125     assertTrue(response.getStatus() == 400);
126     
127     response = mockService.addVertex(postVertexPayload, "v11", "services/inventory/v11", 
128         new TestHeaders(), null, new TestRequest());
129     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
130     assertTrue(response.getStatus() == 201);
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     
137     response = mockService.addVertex(postVertexPayload, "v11", "pserver", "services/inventory/v11", 
138         new TestHeaders(), null, new TestRequest());
139     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
140     assertTrue(response.getStatus() == 201);   
141   }
142   
143   @Test
144   public void testAddEdge() throws CrudException {
145     Response response;
146     
147     response = mockService.addEdge(postEdgePayload, "v11", "services/inventory/v11", 
148         new TestHeaders(), null, new TestRequest());
149     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
150     assertTrue(response.getStatus() == 201);
151     
152     response = mockService.addEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "services/inventory/v11", 
153         new TestHeaders(), null, new TestRequest());
154     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
155     assertTrue(response.getStatus() == 201);   
156   }
157   
158   @Test
159   public void testUpdateVertex() throws CrudException {
160     Response response;
161
162         // Cannot find OXM version
163     response = mockService.updateVertex(putVertexPayload, "v8", "pserver", "test-uuid", "services/inventory/v8",
164             new TestHeaders(), null, new TestRequest());
165     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
166     assertTrue(response.getStatus() == 500);
167     Assert.assertNull(response.getEntityTag());
168         
169     // Test ID mismatch
170     response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "bad-id", 
171         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
172     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
173     assertTrue(response.getStatus() == 400);  
174     
175     // Success case
176     response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "test-uuid", "services/inventory/v11",
177                 new TestHeaders(), null, new TestRequest());
178     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
179     assertTrue(response.getStatus() == 200);  
180     
181     // Patch
182     response = mockService.patchVertex(putVertexPayload, "v11", "pserver", "test-uuid", 
183         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
184     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
185     assertTrue(response.getStatus() == 200);  
186   }
187   
188   @Test
189   public void testUpdateEdge() throws CrudException {
190     Response response;
191     
192     response = mockService.updateEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "my-uuid", 
193         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
194     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
195     assertTrue(response.getStatus() == 200);  
196     
197     // Patch
198     response = mockService.patchEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "my-uuid", 
199         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
200     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
201     assertTrue(response.getStatus() == 200);
202   }
203   
204   @Test
205   public void testGet() throws CrudException {
206     Response response;
207     
208     response = mockService.getVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
209         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
210     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
211     assertTrue(response.getStatus() == 200);
212     
213     response = mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
214         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
215     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
216     assertTrue(response.getStatus() == 200);
217     
218     response = mockService.getVertices("", "v11", "pserver", 
219         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
220     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
221     assertTrue(response.getStatus() == 200);
222     
223     response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn",  
224         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
225     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
226     assertTrue(response.getStatus() == 200);
227   }
228   
229   @Test
230   public void testValidRequestHeader() throws CrudException {
231     TestHeaders testHeaders = new TestHeaders();
232     mockService.validateRequestHeader(testHeaders);
233   }
234
235   @Test
236   public void testInvalidRequestHeaderXTransactionId() throws CrudException {
237     thrown.expect(CrudException.class);
238     thrown.expectMessage("Invalid request, Missing X-TransactionId header");
239
240     TestHeaders testHeaders = new TestHeaders();
241     testHeaders.clearRequestHeader("X-TransactionId");
242     mockService.validateRequestHeader(testHeaders);
243   }
244
245   @Test
246   public void testInvalidRequestHeaderXFromAppId() throws CrudException {
247     thrown.expect(CrudException.class);
248     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
249
250     TestHeaders testHeaders = new TestHeaders();
251     testHeaders.clearRequestHeader("X-FromAppId");
252     mockService.validateRequestHeader(testHeaders);
253   }
254
255   @Test
256   public void testRequestHeaderWithMsId() throws CrudException {
257     thrown.expect(CrudException.class);
258     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
259
260     TestHeaders testHeaders = new TestHeaders();
261     testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
262     mockService.validateRequestHeader(testHeaders);
263   }
264   
265   @Test
266   public void testEmptyRequestHeader() throws CrudException {
267     thrown.expect(CrudException.class);
268     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
269
270     TestHeaders testHeaders = new TestHeaders();
271     testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
272     mockService.validateRequestHeader(testHeaders);
273   }
274
275   @Test
276     public void testGetMultiOxm() throws CrudException {
277         Response response;
278
279         response = mockService.getVertex("", "v13", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
280                 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
281         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
282         assertTrue(response.getStatus() == 200);
283
284         response =
285                 mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
286                         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
287         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
288         assertTrue(response.getStatus() == 200);
289
290         response = mockService.getVertices("", "v13", "pserver", "services/inventory/v11", new TestHeaders(),
291                 new TestUriInfo(), new TestRequest());
292         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
293         assertTrue(response.getStatus() == 200);
294
295         response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn", "services/inventory/v11",
296                 new TestHeaders(), new TestUriInfo(), new TestRequest());
297         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
298         assertTrue(response.getStatus() == 200);
299     }
300   
301   @Test
302   public void testBulk() throws CrudException, IOException {
303     Response response;
304     
305     File bulkFile = new File("src/test/resources/payloads/bulk.json");
306     String payloadStr = readFileToString(bulkFile); 
307     System.out.println(payloadStr);
308     
309     response = mockService.addBulk(payloadStr, "v11", "", 
310         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
311     System.out.println("Bulk Response: " + response.getStatus() + "\n" + response.getEntity().toString());
312     assertTrue(response.getStatus() == 200);  
313   }
314   
315   public static String readFileToString(File aFile) throws IOException {
316
317     BufferedReader br = new BufferedReader(new FileReader(aFile));
318     try {
319       StringBuilder sb = new StringBuilder();
320       String line = br.readLine();
321
322       while (line != null) {
323         sb.append(line);
324         line = br.readLine();
325       }
326
327       return sb.toString().replaceAll("\\s+", "");
328     } finally {
329       try {
330         br.close();
331       } catch (IOException e) {
332         fail("Unexpected IOException: " + e.getMessage());
333       }
334     }
335   }
336
337 }