3d1ce1269411281b0ca1a60ca969ed86112f2bd5
[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.Before;
33 import org.junit.Rule;
34 import org.junit.Test;
35 import org.junit.rules.ExpectedException;
36 import org.mockito.Mockito;
37 import org.onap.crud.dao.TestDao;
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.RelationshipSchemaLoader;
43
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       RelationshipSchemaLoader.resetVersionContextMap();
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", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
104         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
105     assertTrue(response.getStatus() == 200);
106   }
107   
108   @Test
109   public void testAddVertex() throws CrudException {
110     Response response;
111     
112     response = mockService.addVertex(postMissingPropVertexPayload, "v11", "services/inventory/v11", 
113         new TestHeaders(), null, new TestRequest());
114     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
115     assertTrue(response.getStatus() == 400);
116     
117     response = mockService.addVertex(postVertexPayload, "v11", "services/inventory/v11", 
118         new TestHeaders(), null, new TestRequest());
119     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
120     assertTrue(response.getStatus() == 201);
121     
122     response = mockService.addVertex(postMissingPropVertexPayload, "v11", "pserver", "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", "pserver", "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   
133   @Test
134   public void testAddEdge() throws CrudException {
135     Response response;
136     
137     response = mockService.addEdge(postEdgePayload, "v11", "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     response = mockService.addEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "services/inventory/v11", 
143         new TestHeaders(), null, new TestRequest());
144     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
145     assertTrue(response.getStatus() == 201);   
146   }
147   
148   @Test
149   public void testUpdateVertex() throws CrudException {
150     Response response;
151
152     // Test ID mismatch
153     response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "bad-id", 
154         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
155     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
156     assertTrue(response.getStatus() == 400);  
157     
158     // Success case
159     response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "test-uuid", 
160         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
161     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
162     assertTrue(response.getStatus() == 200);  
163     
164     // Patch
165     response = mockService.patchVertex(putVertexPayload, "v11", "pserver", "test-uuid", 
166         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
167     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
168     assertTrue(response.getStatus() == 200);  
169   }
170   
171   @Test
172   public void testUpdateEdge() throws CrudException {
173     Response response;
174     
175     response = mockService.updateEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "my-uuid", 
176         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
177     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
178     assertTrue(response.getStatus() == 200);  
179     
180     // Patch
181     response = mockService.patchEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "my-uuid", 
182         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
183     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
184     assertTrue(response.getStatus() == 200);
185   }
186   
187   @Test
188   public void testGet() throws CrudException {
189     Response response;
190     
191     response = mockService.getVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
192         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
193     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
194     assertTrue(response.getStatus() == 200);
195     
196     response = mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
197         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
198     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
199     assertTrue(response.getStatus() == 200);
200     
201     response = mockService.getVertices("", "v11", "pserver", 
202         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
203     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
204     assertTrue(response.getStatus() == 200);
205     
206     response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn",  
207         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
208     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
209     assertTrue(response.getStatus() == 200);
210   }
211   
212   @Test
213   public void testValidRequestHeader() throws CrudException {
214     TestHeaders testHeaders = new TestHeaders();
215     mockService.validateRequestHeader(testHeaders);
216   }
217
218   @Test
219   public void testInvalidRequestHeaderXTransactionId() throws CrudException {
220     thrown.expect(CrudException.class);
221     thrown.expectMessage("Invalid request, Missing X-TransactionId header");
222
223     TestHeaders testHeaders = new TestHeaders();
224     testHeaders.clearRequestHeader("X-TransactionId");
225     mockService.validateRequestHeader(testHeaders);
226   }
227
228   @Test
229   public void testInvalidRequestHeaderXFromAppId() throws CrudException {
230     thrown.expect(CrudException.class);
231     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
232
233     TestHeaders testHeaders = new TestHeaders();
234     testHeaders.clearRequestHeader("X-FromAppId");
235     mockService.validateRequestHeader(testHeaders);
236   }
237
238   @Test
239   public void testRequestHeaderWithMsId() throws CrudException {
240     thrown.expect(CrudException.class);
241     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
242
243     TestHeaders testHeaders = new TestHeaders();
244     testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
245     mockService.validateRequestHeader(testHeaders);
246   }
247   
248   @Test
249   public void testEmptyRequestHeader() throws CrudException {
250     thrown.expect(CrudException.class);
251     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
252
253     TestHeaders testHeaders = new TestHeaders();
254     testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
255     mockService.validateRequestHeader(testHeaders);
256   }
257
258   @Test
259   public void testBulk() throws CrudException, IOException {
260     Response response;
261     
262     File bulkFile = new File("src/test/resources/payloads/bulk.json");
263     String payloadStr = readFileToString(bulkFile); 
264     System.out.println(payloadStr);
265     
266     response = mockService.addBulk(payloadStr, "v11", "", 
267         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
268     System.out.println("Bulk Response: " + response.getStatus() + "\n" + response.getEntity().toString());
269     assertTrue(response.getStatus() == 200);  
270   }
271   
272   public static String readFileToString(File aFile) throws IOException {
273
274     BufferedReader br = new BufferedReader(new FileReader(aFile));
275     try {
276       StringBuilder sb = new StringBuilder();
277       String line = br.readLine();
278
279       while (line != null) {
280         sb.append(line);
281         line = br.readLine();
282       }
283
284       return sb.toString().replaceAll("\\s+", "");
285     } finally {
286       try {
287         br.close();
288       } catch (IOException e) {
289         fail("Unexpected IOException: " + e.getMessage());
290       }
291     }
292   }
293
294 }