2 * ============LICENSE_START=======================================================
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.crud.service;
23 import static org.junit.Assert.assertTrue;
24 import static org.junit.Assert.fail;
25 import java.io.BufferedReader;
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;
49 public class CrudRestServiceTest {
50 private final String putVertexPayload = "{" +
51 "\"id\": \"test-uuid\"," +
52 "\"type\": \"pserver\"," +
54 "\"fqdn\": \"myhost.onap.com\"," +
55 "\"hostname\": \"myhost\" } }";
57 private final String postVertexPayload = "{" +
58 "\"type\": \"pserver\"," +
60 "\"fqdn\": \"myhost.onap.com\"," +
61 "\"hostname\": \"myhost\" } }";
63 private final String postMissingPropVertexPayload = "{" +
64 "\"type\": \"pserver\"," +
66 "\"fqdn\": \"myhost.onap.com\"," +
67 "\"equip-type\": \"box\" } }";
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\"," +
74 "\"prevent-delete\": \"NONE\" } }";
77 private CrudRestService mockService;
80 public ExpectedException thrown = ExpectedException.none();
83 public void init() throws Exception {
84 Path resourcePath = Paths.get(ClassLoader.getSystemResource("model").toURI());
85 Path parentPath = resourcePath.getParent();
87 System.setProperty("CONFIG_HOME", parentPath.toString());
88 RelationshipSchemaLoader.resetVersionContextMap();
90 CrudGraphDataService service = new CrudGraphDataService(new TestDao());
91 CrudRestService restService = new CrudRestService(service, null);
92 mockService = Mockito.spy(restService);
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));
100 public void testDelete() throws CrudException {
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);
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);
114 public void testAddVertex() throws CrudException {
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());
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);
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);
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);
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);
146 public void testAddEdge() throws CrudException {
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);
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);
161 public void testUpdateVertex() throws CrudException {
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());
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);
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);
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);
191 public void testUpdateEdge() throws CrudException {
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);
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);
207 public void testGet() throws CrudException {
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);
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);
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);
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);
232 public void testValidRequestHeader() throws CrudException {
233 TestHeaders testHeaders = new TestHeaders();
234 mockService.validateRequestHeader(testHeaders);
238 public void testInvalidRequestHeaderXTransactionId() throws CrudException {
239 thrown.expect(CrudException.class);
240 thrown.expectMessage("Invalid request, Missing X-TransactionId header");
242 TestHeaders testHeaders = new TestHeaders();
243 testHeaders.clearRequestHeader("X-TransactionId");
244 mockService.validateRequestHeader(testHeaders);
248 public void testInvalidRequestHeaderXFromAppId() throws CrudException {
249 thrown.expect(CrudException.class);
250 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
252 TestHeaders testHeaders = new TestHeaders();
253 testHeaders.clearRequestHeader("X-FromAppId");
254 mockService.validateRequestHeader(testHeaders);
258 public void testRequestHeaderWithMsId() throws CrudException {
259 thrown.expect(CrudException.class);
260 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
262 TestHeaders testHeaders = new TestHeaders();
263 testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
264 mockService.validateRequestHeader(testHeaders);
268 public void testEmptyRequestHeader() throws CrudException {
269 thrown.expect(CrudException.class);
270 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
272 TestHeaders testHeaders = new TestHeaders();
273 testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
274 mockService.validateRequestHeader(testHeaders);
278 public void testGetMultiOxm() throws CrudException {
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);
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);
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);
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);
304 public void testBulk() throws CrudException, IOException {
307 File bulkFile = new File("src/test/resources/payloads/bulk.json");
308 String payloadStr = readFileToString(bulkFile);
309 System.out.println(payloadStr);
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);
317 public static String readFileToString(File aFile) throws IOException {
319 BufferedReader br = new BufferedReader(new FileReader(aFile));
321 StringBuilder sb = new StringBuilder();
322 String line = br.readLine();
324 while (line != null) {
326 line = br.readLine();
329 return sb.toString().replaceAll("\\s+", "");
333 } catch (IOException e) {
334 fail("Unexpected IOException: " + e.getMessage());