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;
43 import org.junit.runner.RunWith;
44 import org.mockito.junit.MockitoJUnitRunner;
45 import org.onap.crud.OXMModelLoaderSetup;
47 @RunWith(MockitoJUnitRunner.Silent.class)
48 public class CrudRestServiceTest extends OXMModelLoaderSetup{
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/v11/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
71 "\"target\": \"services/inventory/v11/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 System.setProperty("CONFIG_HOME", "src/test/resources");
84 EdgeRulesLoader.resetSchemaVersionContext();
86 ChampDaoMockTest champDaoTest = new ChampDaoMockTest();
87 CrudGraphDataService service = new CrudGraphDataService(champDaoTest.getChampDao());
88 CrudRestService restService = new CrudRestService(service, null);
89 mockService = Mockito.spy(restService);
91 Mockito.doReturn(true).when(mockService).validateRequest(Mockito.any(HttpServletRequest.class),
92 Mockito.anyString(), Mockito.anyString(), Mockito.any(CrudRestService.Action.class), Mockito.anyString(),
93 Mockito.any(HttpHeaders.class));
97 public void testDelete() throws CrudException {
100 response = mockService.deleteVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
101 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
102 assertTrue(response.getStatus() == 200);
104 response = mockService.deleteEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
105 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
106 assertTrue(response.getStatus() == 200);
110 public void testAddVertex() throws CrudException {
113 // Cannot find OXM version
114 response = mockService.addVertex(postVertexPayload, "v7", "services/inventory/v8",
115 new TestHeaders(), null, new TestRequest());
116 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
117 assertTrue(response.getStatus() == 500);
118 Assert.assertNull(response.getEntityTag());
120 response = mockService.addVertex(postMissingPropVertexPayload, "v11", "services/inventory/v11",
121 new TestHeaders(), null, new TestRequest());
122 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
123 assertTrue(response.getStatus() == 400);
124 Assert.assertNull(response.getEntityTag());
126 response = mockService.addVertex(postVertexPayload, "v11", "services/inventory/v11",
127 new TestHeaders(), null, new TestRequest());
128 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
129 assertTrue(response.getStatus() == 201);
130 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
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);
136 Assert.assertNull(response.getEntityTag());
138 response = mockService.addVertex(postVertexPayload, "v11", "pserver", "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 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
146 public void testAddEdge() throws CrudException {
149 response = mockService.addEdge(postEdgePayload, "v9", "services/inventory/v9",
150 new TestHeaders(), null, new TestRequest());
151 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
152 assertTrue(response.getStatus() == 201);
153 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
155 response = mockService.addEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "services/inventory/v11",
156 new TestHeaders(), null, new TestRequest());
157 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
158 assertTrue(response.getStatus() == 201);
159 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
163 public void testAddEdgeMultiplicityRules() throws CrudException {
166 response = mockService.addEdge(postEdgePayload, "v10", "services/inventory/v10",
167 new TestHeaders(), null, new TestRequest());
168 Assert.assertEquals("MANY2ONE multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn",
169 response.getEntity().toString());
170 Assert.assertEquals(400, response.getStatus());
172 response = mockService.addEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "services/inventory/v9",
173 new TestHeaders(), null, new TestRequest());
174 Assert.assertEquals(201, response.getStatus());
176 response = mockService.addEdge(postEdgePayload, "v8", "tosca.relationships.HostedOn", "services/inventory/v8",
177 new TestHeaders(), null, new TestRequest());
178 Assert.assertEquals("ONE2MANY multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn",
179 response.getEntity().toString());
180 Assert.assertEquals(400, response.getStatus());
184 public void testUpdateVertex() throws CrudException {
187 // Cannot find OXM version
188 response = mockService.updateVertex(putVertexPayload, "v7", "pserver", "test-uuid", "services/inventory/v8",
189 new TestHeaders(), null, new TestRequest());
190 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
191 assertTrue(response.getStatus() == 500);
192 Assert.assertNull(response.getEntityTag());
195 response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "bad-id",
196 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
197 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
198 assertTrue(response.getStatus() == 400);
199 Assert.assertNull(response.getEntityTag());
202 response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "test-uuid", "services/inventory/v11",
203 new TestHeaders(), null, new TestRequest());
204 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
205 assertTrue(response.getStatus() == 200);
206 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
209 response = mockService.patchVertex(putVertexPayload, "v11", "pserver", "test-uuid",
210 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
211 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
212 assertTrue(response.getStatus() == 200);
213 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
217 public void testUpdateEdge() throws CrudException {
220 response = mockService.updateEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "my-uuid",
221 "services/inventory/v9", new TestHeaders(), null, new TestRequest());
222 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
223 assertTrue(response.getStatus() == 200);
224 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
227 response = mockService.patchEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "my-uuid",
228 "services/inventory/v9", new TestHeaders(), null, new TestRequest());
229 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
230 assertTrue(response.getStatus() == 200);
231 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
235 public void testGet() throws CrudException {
238 response = mockService.getVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
239 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
240 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
241 assertTrue(response.getStatus() == 200);
243 response = mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
244 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
245 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
246 assertTrue(response.getStatus() == 200);
248 response = mockService.getVertices("", "v11", "pserver",
249 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
250 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
251 assertTrue(response.getStatus() == 200);
253 response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn",
254 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
255 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
256 assertTrue(response.getStatus() == 200);
260 public void testValidRequestHeader() throws CrudException {
261 TestHeaders testHeaders = new TestHeaders();
262 mockService.validateRequestHeader(testHeaders);
266 public void testInvalidRequestHeaderXTransactionId() throws CrudException {
267 thrown.expect(CrudException.class);
268 thrown.expectMessage("Invalid request, Missing X-TransactionId header");
270 TestHeaders testHeaders = new TestHeaders();
271 testHeaders.clearRequestHeader("X-TransactionId");
272 mockService.validateRequestHeader(testHeaders);
276 public void testInvalidRequestHeaderXFromAppId() throws CrudException {
277 thrown.expect(CrudException.class);
278 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
280 TestHeaders testHeaders = new TestHeaders();
281 testHeaders.clearRequestHeader("X-FromAppId");
282 mockService.validateRequestHeader(testHeaders);
286 public void testRequestHeaderWithMsId() throws CrudException {
287 thrown.expect(CrudException.class);
288 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
290 TestHeaders testHeaders = new TestHeaders();
291 testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
292 mockService.validateRequestHeader(testHeaders);
296 public void testEmptyRequestHeader() throws CrudException {
297 thrown.expect(CrudException.class);
298 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
300 TestHeaders testHeaders = new TestHeaders();
301 testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
302 mockService.validateRequestHeader(testHeaders);
306 public void testGetMultiOxm() throws CrudException {
309 response = mockService.getVertex("", "v13", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
310 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
311 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
312 assertTrue(response.getStatus() == 200);
315 mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
316 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
317 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
318 assertTrue(response.getStatus() == 200);
320 response = mockService.getVertices("", "v13", "pserver", "services/inventory/v11", new TestHeaders(),
321 new TestUriInfo(), new TestRequest());
322 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
323 assertTrue(response.getStatus() == 200);
325 response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn", "services/inventory/v11",
326 new TestHeaders(), new TestUriInfo(), new TestRequest());
327 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
328 assertTrue(response.getStatus() == 200);
332 public void testBulk() throws CrudException, IOException {
335 File bulkFile = new File("src/test/resources/payloads/bulk.json");
336 String payloadStr = readFileToString(bulkFile);
337 System.out.println(payloadStr);
339 response = mockService.addBulk(payloadStr, "v9",
340 "services/inventory/v9", new TestHeaders(), null, new TestRequest());
341 System.out.println("Bulk Response: " + response);
342 System.out.println("Response Entity: " + response.getEntity().toString());
343 assertTrue(response.getStatus() == 200);
346 public static String readFileToString(File aFile) throws IOException {
348 BufferedReader br = new BufferedReader(new FileReader(aFile));
350 StringBuilder sb = new StringBuilder();
351 String line = br.readLine();
353 while (line != null) {
355 line = br.readLine();
358 return sb.toString().replaceAll("\\s+", "");
362 } catch (IOException e) {
363 fail("Unexpected IOException: " + e.getMessage());