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 System.setProperty("CONFIG_HOME", "src/test/resources");
81 EdgeRulesLoader.resetSchemaVersionContext();
83 ChampDaoMockTest champDaoTest = new ChampDaoMockTest();
84 CrudGraphDataService service = new CrudGraphDataService(champDaoTest.getChampDao());
85 CrudRestService restService = new CrudRestService(service, null);
86 mockService = Mockito.spy(restService);
88 Mockito.doReturn(true).when(mockService).validateRequest(Mockito.any(HttpServletRequest.class),
89 Mockito.anyString(), Mockito.anyString(), Mockito.any(CrudRestService.Action.class), Mockito.anyString(),
90 Mockito.any(HttpHeaders.class));
94 public void testDelete() throws CrudException {
97 response = mockService.deleteVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
98 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
99 assertTrue(response.getStatus() == 200);
101 response = mockService.deleteEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
102 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
103 assertTrue(response.getStatus() == 200);
107 public void testAddVertex() throws CrudException {
110 // Cannot find OXM version
111 response = mockService.addVertex(postVertexPayload, "v7", "services/inventory/v8",
112 new TestHeaders(), null, new TestRequest());
113 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
114 assertTrue(response.getStatus() == 500);
115 Assert.assertNull(response.getEntityTag());
117 response = mockService.addVertex(postMissingPropVertexPayload, "v11", "services/inventory/v11",
118 new TestHeaders(), null, new TestRequest());
119 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
120 assertTrue(response.getStatus() == 400);
121 Assert.assertNull(response.getEntityTag());
123 response = mockService.addVertex(postVertexPayload, "v11", "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 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
129 response = mockService.addVertex(postMissingPropVertexPayload, "v11", "pserver", "services/inventory/v11",
130 new TestHeaders(), null, new TestRequest());
131 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
132 assertTrue(response.getStatus() == 400);
133 Assert.assertNull(response.getEntityTag());
135 response = mockService.addVertex(postVertexPayload, "v11", "pserver", "services/inventory/v11",
136 new TestHeaders(), null, new TestRequest());
137 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
138 assertTrue(response.getStatus() == 201);
139 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
143 public void testAddEdge() throws CrudException {
146 response = mockService.addEdge(postEdgePayload, "v9", "services/inventory/v9",
147 new TestHeaders(), null, new TestRequest());
148 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
149 assertTrue(response.getStatus() == 201);
150 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
152 response = mockService.addEdge(postEdgePayload, "v9", "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);
156 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
160 public void testAddEdgeMultiplicityRules() throws CrudException {
163 response = mockService.addEdge(postEdgePayload, "v10", "services/inventory/v10",
164 new TestHeaders(), null, new TestRequest());
165 Assert.assertEquals("MANY2ONE multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn",
166 response.getEntity().toString());
167 Assert.assertEquals(400, response.getStatus());
169 response = mockService.addEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "services/inventory/v9",
170 new TestHeaders(), null, new TestRequest());
171 Assert.assertEquals(201, response.getStatus());
173 response = mockService.addEdge(postEdgePayload, "v8", "tosca.relationships.HostedOn", "services/inventory/v8",
174 new TestHeaders(), null, new TestRequest());
175 Assert.assertEquals("ONE2MANY multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn",
176 response.getEntity().toString());
177 Assert.assertEquals(400, response.getStatus());
181 public void testUpdateVertex() throws CrudException {
184 // Cannot find OXM version
185 response = mockService.updateVertex(putVertexPayload, "v7", "pserver", "test-uuid", "services/inventory/v8",
186 new TestHeaders(), null, new TestRequest());
187 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
188 assertTrue(response.getStatus() == 500);
189 Assert.assertNull(response.getEntityTag());
192 response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "bad-id",
193 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
194 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
195 assertTrue(response.getStatus() == 400);
196 Assert.assertNull(response.getEntityTag());
199 response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "test-uuid", "services/inventory/v11",
200 new TestHeaders(), null, new TestRequest());
201 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
202 assertTrue(response.getStatus() == 200);
203 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
206 response = mockService.patchVertex(putVertexPayload, "v11", "pserver", "test-uuid",
207 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
208 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
209 assertTrue(response.getStatus() == 200);
210 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
214 public void testUpdateEdge() throws CrudException {
217 response = mockService.updateEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "my-uuid",
218 "services/inventory/v9", new TestHeaders(), null, new TestRequest());
219 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
220 assertTrue(response.getStatus() == 200);
221 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
224 response = mockService.patchEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "my-uuid",
225 "services/inventory/v9", new TestHeaders(), null, new TestRequest());
226 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
227 assertTrue(response.getStatus() == 200);
228 Assert.assertEquals(response.getEntityTag().getValue(), "test123");
232 public void testGet() throws CrudException {
235 response = mockService.getVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
236 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
237 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
238 assertTrue(response.getStatus() == 200);
240 response = mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
241 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
242 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
243 assertTrue(response.getStatus() == 200);
245 response = mockService.getVertices("", "v11", "pserver",
246 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
247 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
248 assertTrue(response.getStatus() == 200);
250 response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn",
251 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
252 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
253 assertTrue(response.getStatus() == 200);
257 public void testValidRequestHeader() throws CrudException {
258 TestHeaders testHeaders = new TestHeaders();
259 mockService.validateRequestHeader(testHeaders);
263 public void testInvalidRequestHeaderXTransactionId() throws CrudException {
264 thrown.expect(CrudException.class);
265 thrown.expectMessage("Invalid request, Missing X-TransactionId header");
267 TestHeaders testHeaders = new TestHeaders();
268 testHeaders.clearRequestHeader("X-TransactionId");
269 mockService.validateRequestHeader(testHeaders);
273 public void testInvalidRequestHeaderXFromAppId() throws CrudException {
274 thrown.expect(CrudException.class);
275 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
277 TestHeaders testHeaders = new TestHeaders();
278 testHeaders.clearRequestHeader("X-FromAppId");
279 mockService.validateRequestHeader(testHeaders);
283 public void testRequestHeaderWithMsId() throws CrudException {
284 thrown.expect(CrudException.class);
285 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
287 TestHeaders testHeaders = new TestHeaders();
288 testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
289 mockService.validateRequestHeader(testHeaders);
293 public void testEmptyRequestHeader() throws CrudException {
294 thrown.expect(CrudException.class);
295 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
297 TestHeaders testHeaders = new TestHeaders();
298 testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
299 mockService.validateRequestHeader(testHeaders);
303 public void testGetMultiOxm() throws CrudException {
306 response = mockService.getVertex("", "v13", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
307 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
308 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
309 assertTrue(response.getStatus() == 200);
312 mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
313 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
314 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
315 assertTrue(response.getStatus() == 200);
317 response = mockService.getVertices("", "v13", "pserver", "services/inventory/v11", new TestHeaders(),
318 new TestUriInfo(), new TestRequest());
319 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
320 assertTrue(response.getStatus() == 200);
322 response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn", "services/inventory/v11",
323 new TestHeaders(), new TestUriInfo(), new TestRequest());
324 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
325 assertTrue(response.getStatus() == 200);
329 public void testBulk() throws CrudException, IOException {
332 File bulkFile = new File("src/test/resources/payloads/bulk.json");
333 String payloadStr = readFileToString(bulkFile);
334 System.out.println(payloadStr);
336 response = mockService.addBulk(payloadStr, "v9", "",
337 "services/inventory/v9", new TestHeaders(), null, new TestRequest());
338 System.out.println("Bulk Response: " + response.getStatus() + "\n" + response.getEntity().toString());
339 assertTrue(response.getStatus() == 200);
342 public static String readFileToString(File aFile) throws IOException {
344 BufferedReader br = new BufferedReader(new FileReader(aFile));
346 StringBuilder sb = new StringBuilder();
347 String line = br.readLine();
349 while (line != null) {
351 line = br.readLine();
354 return sb.toString().replaceAll("\\s+", "");
358 } catch (IOException e) {
359 fail("Unexpected IOException: " + e.getMessage());