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.EdgeRulesLoader;
48 public class CrudRestServiceTest {
49 private final String putVertexPayload = "{" +
50 "\"id\": \"test-uuid\"," +
51 "\"type\": \"pserver\"," +
53 "\"fqdn\": \"myhost.onap.com\"," +
54 "\"hostname\": \"myhost\" } }";
56 private final String postVertexPayload = "{" +
57 "\"type\": \"pserver\"," +
59 "\"fqdn\": \"myhost.onap.com\"," +
60 "\"hostname\": \"myhost\" } }";
62 private final String postMissingPropVertexPayload = "{" +
63 "\"type\": \"pserver\"," +
65 "\"fqdn\": \"myhost.onap.com\"," +
66 "\"equip-type\": \"box\" } }";
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\"," +
73 "\"prevent-delete\": \"NONE\" } }";
76 private CrudRestService mockService;
79 public ExpectedException thrown = ExpectedException.none();
82 public void init() throws Exception {
83 Path resourcePath = Paths.get(ClassLoader.getSystemResource("model").toURI());
84 Path parentPath = resourcePath.getParent();
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);
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));
98 public void testDelete() throws CrudException {
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);
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);
112 public void testAddVertex() throws CrudException {
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());
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);
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);
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);
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);
144 public void testAddEdge() throws CrudException {
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);
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);
159 public void testUpdateVertex() throws CrudException {
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());
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);
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);
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);
189 public void testUpdateEdge() throws CrudException {
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);
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);
205 public void testGet() throws CrudException {
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);
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);
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);
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);
230 public void testValidRequestHeader() throws CrudException {
231 TestHeaders testHeaders = new TestHeaders();
232 mockService.validateRequestHeader(testHeaders);
236 public void testInvalidRequestHeaderXTransactionId() throws CrudException {
237 thrown.expect(CrudException.class);
238 thrown.expectMessage("Invalid request, Missing X-TransactionId header");
240 TestHeaders testHeaders = new TestHeaders();
241 testHeaders.clearRequestHeader("X-TransactionId");
242 mockService.validateRequestHeader(testHeaders);
246 public void testInvalidRequestHeaderXFromAppId() throws CrudException {
247 thrown.expect(CrudException.class);
248 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
250 TestHeaders testHeaders = new TestHeaders();
251 testHeaders.clearRequestHeader("X-FromAppId");
252 mockService.validateRequestHeader(testHeaders);
256 public void testRequestHeaderWithMsId() throws CrudException {
257 thrown.expect(CrudException.class);
258 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
260 TestHeaders testHeaders = new TestHeaders();
261 testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
262 mockService.validateRequestHeader(testHeaders);
266 public void testEmptyRequestHeader() throws CrudException {
267 thrown.expect(CrudException.class);
268 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
270 TestHeaders testHeaders = new TestHeaders();
271 testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
272 mockService.validateRequestHeader(testHeaders);
276 public void testGetMultiOxm() throws CrudException {
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);
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);
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);
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);
302 public void testBulk() throws CrudException, IOException {
305 File bulkFile = new File("src/test/resources/payloads/bulk.json");
306 String payloadStr = readFileToString(bulkFile);
307 System.out.println(payloadStr);
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);
315 public static String readFileToString(File aFile) throws IOException {
317 BufferedReader br = new BufferedReader(new FileReader(aFile));
319 StringBuilder sb = new StringBuilder();
320 String line = br.readLine();
322 while (line != null) {
324 line = br.readLine();
327 return sb.toString().replaceAll("\\s+", "");
331 } catch (IOException e) {
332 fail("Unexpected IOException: " + e.getMessage());