Process multi-OXM 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.RelationshipSchemaLoader;
46
47
48
49 public class CrudRestServiceTest {
50   private final String putVertexPayload = "{" +
51       "\"id\": \"test-uuid\"," +
52       "\"type\": \"pserver\"," +
53       "\"properties\": {" +
54       "\"fqdn\": \"myhost.onap.com\"," +
55       "\"hostname\": \"myhost\" } }";
56   
57   private final String postVertexPayload = "{" +
58       "\"type\": \"pserver\"," +
59       "\"properties\": {" +
60       "\"fqdn\": \"myhost.onap.com\"," +
61       "\"hostname\": \"myhost\" } }";
62   
63   private final String postMissingPropVertexPayload = "{" +
64       "\"type\": \"pserver\"," +
65       "\"properties\": {" +
66       "\"fqdn\": \"myhost.onap.com\"," +
67       "\"equip-type\": \"box\" } }";
68  
69   private final String postEdgePayload = "{" +
70       "\"type\": \"tosca.relationships.HostedOn\"," +
71       "\"source\": \"services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
72       "\"target\": \"services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908\"," +
73       "\"properties\": {" +
74       "\"prevent-delete\": \"NONE\" } }";
75
76   
77   private CrudRestService mockService;
78   
79   @Rule
80   public ExpectedException thrown = ExpectedException.none();
81
82   @Before
83   public void init() throws Exception {
84       Path resourcePath = Paths.get(ClassLoader.getSystemResource("model").toURI());
85       Path parentPath = resourcePath.getParent();
86
87       System.setProperty("CONFIG_HOME", parentPath.toString());
88       RelationshipSchemaLoader.resetVersionContextMap();
89       
90       CrudGraphDataService service = new CrudGraphDataService(new TestDao());
91       CrudRestService restService = new CrudRestService(service, null);
92       mockService = Mockito.spy(restService);
93       
94       Mockito.doReturn(true).when(mockService).validateRequest(Mockito.any(HttpServletRequest.class), 
95           Mockito.anyString(), Mockito.anyString(), Mockito.any(CrudRestService.Action.class), Mockito.anyString(), 
96           Mockito.any(HttpHeaders.class));
97   }
98   
99   @Test
100   public void testDelete() throws CrudException {
101     Response response;
102     
103     response = mockService.deleteVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
104         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
105     assertTrue(response.getStatus() == 200);
106     
107         response = mockService.deleteEdge("", "v11", "tosca.relationships.HostedOn",
108                 "872dd5df-0be9-4167-95e9-2cf4b21165ed",
109         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
110     assertTrue(response.getStatus() == 200);
111   }
112   
113   @Test
114   public void testAddVertex() throws CrudException {
115     Response response;
116     
117         // Cannot find OXM version
118     response = mockService.addVertex(postVertexPayload, "v8", "services/inventory/v8",
119             new TestHeaders(), null, new TestRequest());
120     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
121     assertTrue(response.getStatus() == 500);
122     Assert.assertNull(response.getEntityTag());
123         
124     response = mockService.addVertex(postMissingPropVertexPayload, "v11", "services/inventory/v11", 
125         new TestHeaders(), null, new TestRequest());
126     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
127     assertTrue(response.getStatus() == 400);
128     
129     response = mockService.addVertex(postVertexPayload, "v11", "services/inventory/v11", 
130         new TestHeaders(), null, new TestRequest());
131     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
132     assertTrue(response.getStatus() == 201);
133     
134     response = mockService.addVertex(postMissingPropVertexPayload, "v11", "pserver", "services/inventory/v11", 
135         new TestHeaders(), null, new TestRequest());
136     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
137     assertTrue(response.getStatus() == 400); 
138     
139     response = mockService.addVertex(postVertexPayload, "v11", "pserver", "services/inventory/v11", 
140         new TestHeaders(), null, new TestRequest());
141     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
142     assertTrue(response.getStatus() == 201);   
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     
154     response = mockService.addEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "services/inventory/v11", 
155         new TestHeaders(), null, new TestRequest());
156     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
157     assertTrue(response.getStatus() == 201);   
158   }
159   
160   @Test
161   public void testUpdateVertex() throws CrudException {
162     Response response;
163
164         // Cannot find OXM version
165     response = mockService.updateVertex(putVertexPayload, "v8", "pserver", "test-uuid", "services/inventory/v8",
166             new TestHeaders(), null, new TestRequest());
167     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
168     assertTrue(response.getStatus() == 500);
169     Assert.assertNull(response.getEntityTag());
170         
171     // Test ID mismatch
172     response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "bad-id", 
173         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
174     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
175     assertTrue(response.getStatus() == 400);  
176     
177     // Success case
178     response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "test-uuid", "services/inventory/v11",
179                 new TestHeaders(), null, new TestRequest());
180     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
181     assertTrue(response.getStatus() == 200);  
182     
183     // Patch
184     response = mockService.patchVertex(putVertexPayload, "v11", "pserver", "test-uuid", 
185         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
186     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
187     assertTrue(response.getStatus() == 200);  
188   }
189   
190   @Test
191   public void testUpdateEdge() throws CrudException {
192     Response response;
193     
194     response = mockService.updateEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "my-uuid", 
195         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
196     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
197     assertTrue(response.getStatus() == 200);  
198     
199     // Patch
200     response = mockService.patchEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "my-uuid", 
201         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
202     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
203     assertTrue(response.getStatus() == 200);
204   }
205   
206   @Test
207   public void testGet() throws CrudException {
208     Response response;
209     
210     response = mockService.getVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
211         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
212     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
213     assertTrue(response.getStatus() == 200);
214     
215     response = mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
216         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
217     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
218     assertTrue(response.getStatus() == 200);
219     
220     response = mockService.getVertices("", "v11", "pserver", 
221         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
222     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
223     assertTrue(response.getStatus() == 200);
224     
225     response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn",  
226         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
227     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
228     assertTrue(response.getStatus() == 200);
229   }
230   
231   @Test
232   public void testValidRequestHeader() throws CrudException {
233     TestHeaders testHeaders = new TestHeaders();
234     mockService.validateRequestHeader(testHeaders);
235   }
236
237   @Test
238   public void testInvalidRequestHeaderXTransactionId() throws CrudException {
239     thrown.expect(CrudException.class);
240     thrown.expectMessage("Invalid request, Missing X-TransactionId header");
241
242     TestHeaders testHeaders = new TestHeaders();
243     testHeaders.clearRequestHeader("X-TransactionId");
244     mockService.validateRequestHeader(testHeaders);
245   }
246
247   @Test
248   public void testInvalidRequestHeaderXFromAppId() throws CrudException {
249     thrown.expect(CrudException.class);
250     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
251
252     TestHeaders testHeaders = new TestHeaders();
253     testHeaders.clearRequestHeader("X-FromAppId");
254     mockService.validateRequestHeader(testHeaders);
255   }
256
257   @Test
258   public void testRequestHeaderWithMsId() throws CrudException {
259     thrown.expect(CrudException.class);
260     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
261
262     TestHeaders testHeaders = new TestHeaders();
263     testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
264     mockService.validateRequestHeader(testHeaders);
265   }
266   
267   @Test
268   public void testEmptyRequestHeader() throws CrudException {
269     thrown.expect(CrudException.class);
270     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
271
272     TestHeaders testHeaders = new TestHeaders();
273     testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
274     mockService.validateRequestHeader(testHeaders);
275   }
276
277   @Test
278     public void testGetMultiOxm() throws CrudException {
279         Response response;
280
281         response = mockService.getVertex("", "v13", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
282                 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
283         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
284         assertTrue(response.getStatus() == 200);
285
286         response =
287                 mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
288                         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
289         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
290         assertTrue(response.getStatus() == 200);
291
292         response = mockService.getVertices("", "v13", "pserver", "services/inventory/v11", new TestHeaders(),
293                 new TestUriInfo(), new TestRequest());
294         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
295         assertTrue(response.getStatus() == 200);
296
297         response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn", "services/inventory/v11",
298                 new TestHeaders(), new TestUriInfo(), new TestRequest());
299         System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
300         assertTrue(response.getStatus() == 200);
301     }
302   
303   @Test
304   public void testBulk() throws CrudException, IOException {
305     Response response;
306     
307     File bulkFile = new File("src/test/resources/payloads/bulk.json");
308     String payloadStr = readFileToString(bulkFile); 
309     System.out.println(payloadStr);
310     
311     response = mockService.addBulk(payloadStr, "v11", "", 
312         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
313     System.out.println("Bulk Response: " + response.getStatus() + "\n" + response.getEntity().toString());
314     assertTrue(response.getStatus() == 200);  
315   }
316   
317   public static String readFileToString(File aFile) throws IOException {
318
319     BufferedReader br = new BufferedReader(new FileReader(aFile));
320     try {
321       StringBuilder sb = new StringBuilder();
322       String line = br.readLine();
323
324       while (line != null) {
325         sb.append(line);
326         line = br.readLine();
327       }
328
329       return sb.toString().replaceAll("\\s+", "");
330     } finally {
331       try {
332         br.close();
333       } catch (IOException e) {
334         fail("Unexpected IOException: " + e.getMessage());
335       }
336     }
337   }
338
339 }