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 javax.servlet.http.HttpServletRequest;
30 import javax.ws.rs.core.HttpHeaders;
31 import javax.ws.rs.core.Response;
32 import org.junit.Assert;
33 import org.junit.Before;
34 import org.junit.Rule;
35 import org.junit.Test;
36 import org.junit.rules.ExpectedException;
37 import org.mockito.Mockito;
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.EdgeRulesLoader;
45 public class CrudRestServiceTest {
46 private final String putVertexPayload = "{" +
47 "\"id\": \"test-uuid\"," +
48 "\"type\": \"pserver\"," +
50 "\"fqdn\": \"myhost.onap.com\"," +
51 "\"hostname\": \"myhost\" } }";
53 private final String postVertexPayload = "{" +
54 "\"type\": \"pserver\"," +
56 "\"fqdn\": \"myhost.onap.com\"," +
57 "\"hostname\": \"myhost\" } }";
59 private final String postMissingPropVertexPayload = "{" +
60 "\"type\": \"pserver\"," +
62 "\"fqdn\": \"myhost.onap.com\"," +
63 "\"equip-type\": \"box\" } }";
65 private final String postEdgePayload = "{" +
66 "\"type\": \"tosca.relationships.HostedOn\"," +
67 "\"source\": \"services/inventory/v11/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
68 "\"target\": \"services/inventory/v11/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908\"," +
70 "\"prevent-delete\": \"NONE\" } }";
73 private CrudRestService mockService;
76 public ExpectedException thrown = ExpectedException.none();
79 public void init() throws Exception {
80 ClassLoader classLoader = getClass().getClassLoader();
81 File dir = new File(classLoader.getResource("rules").getFile());
82 System.setProperty("CONFIG_HOME", dir.getParent());
83 EdgeRulesLoader.resetSchemaVersionContext();
85 CrudGraphDataService service = new CrudGraphDataService(new TestDao());
86 CrudRestService restService = new CrudRestService(service, null);
87 mockService = Mockito.spy(restService);
89 Mockito.doReturn(true).when(mockService).validateRequest(Mockito.any(HttpServletRequest.class),
90 Mockito.anyString(), Mockito.anyString(), Mockito.any(CrudRestService.Action.class), Mockito.anyString(),
91 Mockito.any(HttpHeaders.class));
95 public void testDelete() throws CrudException {
98 response = mockService.deleteVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
99 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
100 assertTrue(response.getStatus() == 200);
102 response = mockService.deleteEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
103 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
104 assertTrue(response.getStatus() == 200);
108 public void testAddVertex() throws CrudException {
111 // Cannot find OXM version
112 response = mockService.addVertex(postVertexPayload, "v7", "services/inventory/v8",
113 new TestHeaders(), null, new TestRequest());
114 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
115 assertTrue(response.getStatus() == 500);
116 Assert.assertNull(response.getEntityTag());
118 response = mockService.addVertex(postMissingPropVertexPayload, "v11", "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 Assert.assertNull(response.getEntityTag());
124 response = mockService.addVertex(postVertexPayload, "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() == 201);
128 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
130 response = mockService.addVertex(postMissingPropVertexPayload, "v11", "pserver", "services/inventory/v11",
131 new TestHeaders(), null, new TestRequest());
132 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
133 assertTrue(response.getStatus() == 400);
134 Assert.assertNull(response.getEntityTag());
136 response = mockService.addVertex(postVertexPayload, "v11", "pserver", "services/inventory/v11",
137 new TestHeaders(), null, new TestRequest());
138 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
139 assertTrue(response.getStatus() == 201);
140 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
144 public void testAddEdge() throws CrudException {
147 response = mockService.addEdge(postEdgePayload, "v9", "services/inventory/v9",
148 new TestHeaders(), null, new TestRequest());
149 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
150 assertTrue(response.getStatus() == 201);
151 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
153 response = mockService.addEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "services/inventory/v11",
154 new TestHeaders(), null, new TestRequest());
155 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
156 assertTrue(response.getStatus() == 201);
157 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
161 public void testAddEdgeMultiplicityRules() throws CrudException {
164 response = mockService.addEdge(postEdgePayload, "v10", "services/inventory/v10",
165 new TestHeaders(), null, new TestRequest());
166 Assert.assertEquals("MANY2ONE multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn",
167 response.getEntity().toString());
168 Assert.assertEquals(400, response.getStatus());
170 response = mockService.addEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "services/inventory/v9",
171 new TestHeaders(), null, new TestRequest());
172 Assert.assertEquals(201, response.getStatus());
174 response = mockService.addEdge(postEdgePayload, "v8", "tosca.relationships.HostedOn", "services/inventory/v8",
175 new TestHeaders(), null, new TestRequest());
176 Assert.assertEquals("ONE2MANY multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn",
177 response.getEntity().toString());
178 Assert.assertEquals(400, response.getStatus());
182 public void testUpdateVertex() throws CrudException {
185 // Cannot find OXM version
186 response = mockService.updateVertex(putVertexPayload, "v7", "pserver", "test-uuid", "services/inventory/v8",
187 new TestHeaders(), null, new TestRequest());
188 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
189 assertTrue(response.getStatus() == 500);
190 Assert.assertNull(response.getEntityTag());
193 response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "bad-id",
194 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
195 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
196 assertTrue(response.getStatus() == 400);
197 Assert.assertNull(response.getEntityTag());
200 response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "test-uuid", "services/inventory/v11",
201 new TestHeaders(), null, new TestRequest());
202 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
203 assertTrue(response.getStatus() == 200);
204 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
207 response = mockService.patchVertex(putVertexPayload, "v11", "pserver", "test-uuid",
208 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
209 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
210 assertTrue(response.getStatus() == 200);
211 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
215 public void testUpdateEdge() throws CrudException {
218 response = mockService.updateEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "my-uuid",
219 "services/inventory/v9", new TestHeaders(), null, new TestRequest());
220 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
221 assertTrue(response.getStatus() == 200);
222 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
225 response = mockService.patchEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "my-uuid",
226 "services/inventory/v9", new TestHeaders(), null, new TestRequest());
227 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
228 assertTrue(response.getStatus() == 200);
229 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
233 public void testGet() throws CrudException {
236 response = mockService.getVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
237 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
238 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
239 assertTrue(response.getStatus() == 200);
241 response = mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
242 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
243 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
244 assertTrue(response.getStatus() == 200);
246 response = mockService.getVertices("", "v11", "pserver",
247 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
248 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
249 assertTrue(response.getStatus() == 200);
251 response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn",
252 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
253 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
254 assertTrue(response.getStatus() == 200);
258 public void testValidRequestHeader() throws CrudException {
259 TestHeaders testHeaders = new TestHeaders();
260 mockService.validateRequestHeader(testHeaders);
264 public void testInvalidRequestHeaderXTransactionId() throws CrudException {
265 thrown.expect(CrudException.class);
266 thrown.expectMessage("Invalid request, Missing X-TransactionId header");
268 TestHeaders testHeaders = new TestHeaders();
269 testHeaders.clearRequestHeader("X-TransactionId");
270 mockService.validateRequestHeader(testHeaders);
274 public void testInvalidRequestHeaderXFromAppId() throws CrudException {
275 thrown.expect(CrudException.class);
276 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
278 TestHeaders testHeaders = new TestHeaders();
279 testHeaders.clearRequestHeader("X-FromAppId");
280 mockService.validateRequestHeader(testHeaders);
284 public void testRequestHeaderWithMsId() throws CrudException {
285 thrown.expect(CrudException.class);
286 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
288 TestHeaders testHeaders = new TestHeaders();
289 testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
290 mockService.validateRequestHeader(testHeaders);
294 public void testEmptyRequestHeader() throws CrudException {
295 thrown.expect(CrudException.class);
296 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
298 TestHeaders testHeaders = new TestHeaders();
299 testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
300 mockService.validateRequestHeader(testHeaders);
304 public void testGetMultiOxm() throws CrudException {
307 response = mockService.getVertex("", "v13", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
308 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
309 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
310 assertTrue(response.getStatus() == 200);
313 mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
314 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
315 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
316 assertTrue(response.getStatus() == 200);
318 response = mockService.getVertices("", "v13", "pserver", "services/inventory/v11", new TestHeaders(),
319 new TestUriInfo(), new TestRequest());
320 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
321 assertTrue(response.getStatus() == 200);
323 response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn", "services/inventory/v11",
324 new TestHeaders(), new TestUriInfo(), new TestRequest());
325 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
326 assertTrue(response.getStatus() == 200);
330 public void testBulk() throws CrudException, IOException {
333 File bulkFile = new File("src/test/resources/payloads/bulk.json");
334 String payloadStr = readFileToString(bulkFile);
335 System.out.println(payloadStr);
337 response = mockService.addBulk(payloadStr, "v9", "",
338 "services/inventory/v9", new TestHeaders(), null, new TestRequest());
339 System.out.println("Bulk Response: " + response.getStatus() + "\n" + response.getEntity().toString());
340 assertTrue(response.getStatus() == 200);
343 public static String readFileToString(File aFile) throws IOException {
345 BufferedReader br = new BufferedReader(new FileReader(aFile));
347 StringBuilder sb = new StringBuilder();
348 String line = br.readLine();
350 while (line != null) {
352 line = br.readLine();
355 return sb.toString().replaceAll("\\s+", "");
359 } catch (IOException e) {
360 fail("Unexpected IOException: " + e.getMessage());