b61f234bfae2402f399ad9f0fd6cbe6ce5b548a7
[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.exception.CrudException;
38 import org.onap.schema.RelationshipSchemaLoader;
39
40
41
42 public class CrudRestServiceTest {
43   private final String putVertexPayload = "{" +
44       "\"id\": \"test-uuid\"," +
45       "\"type\": \"pserver\"," +
46       "\"properties\": {" +
47       "\"fqdn\": \"myhost.onap.com\"," +
48       "\"hostname\": \"myhost\" } }";
49   
50   private final String postVertexPayload = "{" +
51       "\"type\": \"pserver\"," +
52       "\"properties\": {" +
53       "\"fqdn\": \"myhost.onap.com\"," +
54       "\"hostname\": \"myhost\" } }";
55   
56   private final String postMissingPropVertexPayload = "{" +
57       "\"type\": \"pserver\"," +
58       "\"properties\": {" +
59       "\"fqdn\": \"myhost.onap.com\"," +
60       "\"equip-type\": \"box\" } }";
61  
62   private final String postEdgePayload = "{" +
63       "\"type\": \"tosca.relationships.HostedOn\"," +
64       "\"source\": \"services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
65       "\"target\": \"services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908\"," +
66       "\"properties\": {" +
67       "\"prevent-delete\": \"NONE\" } }";
68
69   
70   private CrudRestService mockService;
71   
72   @Rule
73   public ExpectedException thrown = ExpectedException.none();
74
75   @Before
76   public void init() throws Exception {
77       ClassLoader classLoader = getClass().getClassLoader();
78       File dir = new File(classLoader.getResource("model").getFile());
79       System.setProperty("CONFIG_HOME", dir.getParent());
80       RelationshipSchemaLoader.resetVersionContextMap();
81       
82       CrudGraphDataService service = new CrudGraphDataService(new TestDao());
83       CrudRestService restService = new CrudRestService(service, null);
84       mockService = Mockito.spy(restService);
85       
86       Mockito.doReturn(true).when(mockService).validateRequest(Mockito.any(HttpServletRequest.class), 
87           Mockito.anyString(), Mockito.anyString(), Mockito.any(CrudRestService.Action.class), Mockito.anyString(), 
88           Mockito.any(HttpHeaders.class));
89   }
90   
91   @Test
92   public void testDelete() throws CrudException {
93     Response response;
94     
95     response = mockService.deleteVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
96         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
97     assertTrue(response.getStatus() == 200);
98     
99     response = mockService.deleteEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
100         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
101     assertTrue(response.getStatus() == 200);
102   }
103   
104   @Test
105   public void testAddVertex() throws CrudException {
106     Response response;
107     
108     response = mockService.addVertex(postMissingPropVertexPayload, "v11", "services/inventory/v11", 
109         new TestHeaders(), null, new TestRequest());
110     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
111     assertTrue(response.getStatus() == 400);
112     
113     response = mockService.addVertex(postVertexPayload, "v11", "services/inventory/v11", 
114         new TestHeaders(), null, new TestRequest());
115     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
116     assertTrue(response.getStatus() == 201);
117     
118     response = mockService.addVertex(postMissingPropVertexPayload, "v11", "pserver", "services/inventory/v11", 
119         new TestHeaders(), null, new TestRequest());
120     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
121     assertTrue(response.getStatus() == 400); 
122     
123     response = mockService.addVertex(postVertexPayload, "v11", "pserver", "services/inventory/v11", 
124         new TestHeaders(), null, new TestRequest());
125     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
126     assertTrue(response.getStatus() == 201);   
127   }
128   
129   @Test
130   public void testAddEdge() throws CrudException {
131     Response response;
132     
133     response = mockService.addEdge(postEdgePayload, "v11", "services/inventory/v11", 
134         new TestHeaders(), null, new TestRequest());
135     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
136     assertTrue(response.getStatus() == 201);
137     
138     response = mockService.addEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "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   }
143   
144   @Test
145   public void testUpdateVertex() throws CrudException {
146     Response response;
147
148     // Test ID mismatch
149     response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "bad-id", 
150         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
151     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
152     assertTrue(response.getStatus() == 400);  
153     
154     // Success case
155     response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "test-uuid", 
156         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
157     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
158     assertTrue(response.getStatus() == 200);  
159     
160     // Patch
161     response = mockService.patchVertex(putVertexPayload, "v11", "pserver", "test-uuid", 
162         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
163     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
164     assertTrue(response.getStatus() == 200);  
165   }
166   
167   @Test
168   public void testUpdateEdge() throws CrudException {
169     Response response;
170     
171     response = mockService.updateEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "my-uuid", 
172         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
173     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
174     assertTrue(response.getStatus() == 200);  
175     
176     // Patch
177     response = mockService.patchEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "my-uuid", 
178         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
179     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
180     assertTrue(response.getStatus() == 200);
181   }
182   
183   @Test
184   public void testGet() throws CrudException {
185     Response response;
186     
187     response = mockService.getVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
188         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
189     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
190     assertTrue(response.getStatus() == 200);
191     
192     response = mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed", 
193         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
194     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
195     assertTrue(response.getStatus() == 200);
196     
197     response = mockService.getVertices("", "v11", "pserver", 
198         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
199     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
200     assertTrue(response.getStatus() == 200);
201     
202     response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn",  
203         "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
204     System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
205     assertTrue(response.getStatus() == 200);
206   }
207   
208   @Test
209   public void testValidRequestHeader() throws CrudException {
210     TestHeaders testHeaders = new TestHeaders();
211     mockService.validateRequestHeader(testHeaders);
212   }
213
214   @Test
215   public void testInvalidRequestHeaderXTransactionId() throws CrudException {
216     thrown.expect(CrudException.class);
217     thrown.expectMessage("Invalid request, Missing X-TransactionId header");
218
219     TestHeaders testHeaders = new TestHeaders();
220     testHeaders.clearRequestHeader("X-TransactionId");
221     mockService.validateRequestHeader(testHeaders);
222   }
223
224   @Test
225   public void testInvalidRequestHeaderXFromAppId() throws CrudException {
226     thrown.expect(CrudException.class);
227     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
228
229     TestHeaders testHeaders = new TestHeaders();
230     testHeaders.clearRequestHeader("X-FromAppId");
231     mockService.validateRequestHeader(testHeaders);
232   }
233
234   @Test
235   public void testEmptyRequestHeader() throws CrudException {
236     thrown.expect(CrudException.class);
237     thrown.expectMessage("Invalid request, Missing X-FromAppId header");
238
239     TestHeaders testHeaders = new TestHeaders();
240     testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
241     mockService.validateRequestHeader(testHeaders);
242   }
243
244   @Test
245   public void testBulk() throws CrudException, IOException {
246     Response response;
247     
248     File bulkFile = new File("src/test/resources/payloads/bulk.json");
249     String payloadStr = readFileToString(bulkFile); 
250     System.out.println(payloadStr);
251     
252     response = mockService.addBulk(payloadStr, "v11", "", 
253         "services/inventory/v11", new TestHeaders(), null, new TestRequest());
254     System.out.println("Bulk Response: " + response.getStatus() + "\n" + response.getEntity().toString());
255     assertTrue(response.getStatus() == 200);  
256   }
257   
258   public static String readFileToString(File aFile) throws IOException {
259
260     BufferedReader br = new BufferedReader(new FileReader(aFile));
261     try {
262       StringBuilder sb = new StringBuilder();
263       String line = br.readLine();
264
265       while (line != null) {
266         sb.append(line);
267         line = br.readLine();
268       }
269
270       return sb.toString().replaceAll("\\s+", "");
271     } finally {
272       try {
273         br.close();
274       } catch (IOException e) {
275         fail("Unexpected IOException: " + e.getMessage());
276       }
277     }
278   }
279
280 }