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.Before;
33 import org.junit.Rule;
34 import org.junit.Test;
35 import org.junit.rules.ExpectedException;
36 import org.mockito.Mockito;
37 import org.onap.crud.dao.TestDao;
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.RelationshipSchemaLoader;
46 public class CrudRestServiceTest {
47 private final String putVertexPayload = "{" +
48 "\"id\": \"test-uuid\"," +
49 "\"type\": \"pserver\"," +
51 "\"fqdn\": \"myhost.onap.com\"," +
52 "\"hostname\": \"myhost\" } }";
54 private final String postVertexPayload = "{" +
55 "\"type\": \"pserver\"," +
57 "\"fqdn\": \"myhost.onap.com\"," +
58 "\"hostname\": \"myhost\" } }";
60 private final String postMissingPropVertexPayload = "{" +
61 "\"type\": \"pserver\"," +
63 "\"fqdn\": \"myhost.onap.com\"," +
64 "\"equip-type\": \"box\" } }";
66 private final String postEdgePayload = "{" +
67 "\"type\": \"tosca.relationships.HostedOn\"," +
68 "\"source\": \"services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
69 "\"target\": \"services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908\"," +
71 "\"prevent-delete\": \"NONE\" } }";
74 private CrudRestService mockService;
77 public ExpectedException thrown = ExpectedException.none();
80 public void init() throws Exception {
81 ClassLoader classLoader = getClass().getClassLoader();
82 File dir = new File(classLoader.getResource("model").getFile());
83 System.setProperty("CONFIG_HOME", dir.getParent());
84 RelationshipSchemaLoader.resetVersionContextMap();
86 CrudGraphDataService service = new CrudGraphDataService(new TestDao());
87 CrudRestService restService = new CrudRestService(service, null);
88 mockService = Mockito.spy(restService);
90 Mockito.doReturn(true).when(mockService).validateRequest(Mockito.any(HttpServletRequest.class),
91 Mockito.anyString(), Mockito.anyString(), Mockito.any(CrudRestService.Action.class), Mockito.anyString(),
92 Mockito.any(HttpHeaders.class));
96 public void testDelete() throws CrudException {
99 response = mockService.deleteVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
100 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
101 assertTrue(response.getStatus() == 200);
103 response = mockService.deleteEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
104 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
105 assertTrue(response.getStatus() == 200);
109 public void testAddVertex() throws CrudException {
112 response = mockService.addVertex(postMissingPropVertexPayload, "v11", "services/inventory/v11",
113 new TestHeaders(), null, new TestRequest());
114 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
115 assertTrue(response.getStatus() == 400);
117 response = mockService.addVertex(postVertexPayload, "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() == 201);
122 response = mockService.addVertex(postMissingPropVertexPayload, "v11", "pserver", "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", "pserver", "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);
134 public void testAddEdge() throws CrudException {
137 response = mockService.addEdge(postEdgePayload, "v11", "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);
142 response = mockService.addEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "services/inventory/v11",
143 new TestHeaders(), null, new TestRequest());
144 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
145 assertTrue(response.getStatus() == 201);
149 public void testUpdateVertex() throws CrudException {
153 response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "bad-id",
154 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
155 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
156 assertTrue(response.getStatus() == 400);
159 response = mockService.updateVertex(putVertexPayload, "v11", "pserver", "test-uuid",
160 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
161 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
162 assertTrue(response.getStatus() == 200);
165 response = mockService.patchVertex(putVertexPayload, "v11", "pserver", "test-uuid",
166 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
167 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
168 assertTrue(response.getStatus() == 200);
172 public void testUpdateEdge() throws CrudException {
175 response = mockService.updateEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "my-uuid",
176 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
177 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
178 assertTrue(response.getStatus() == 200);
181 response = mockService.patchEdge(postEdgePayload, "v11", "tosca.relationships.HostedOn", "my-uuid",
182 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
183 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
184 assertTrue(response.getStatus() == 200);
188 public void testGet() throws CrudException {
191 response = mockService.getVertex("", "v11", "pserver", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
192 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
193 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
194 assertTrue(response.getStatus() == 200);
196 response = mockService.getEdge("", "v11", "tosca.relationships.HostedOn", "872dd5df-0be9-4167-95e9-2cf4b21165ed",
197 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
198 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
199 assertTrue(response.getStatus() == 200);
201 response = mockService.getVertices("", "v11", "pserver",
202 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
203 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
204 assertTrue(response.getStatus() == 200);
206 response = mockService.getEdges("", "v11", "tosca.relationships.HostedOn",
207 "services/inventory/v11", new TestHeaders(), new TestUriInfo(), new TestRequest());
208 System.out.println("Response: " + response.getStatus() + "\n" + response.getEntity().toString());
209 assertTrue(response.getStatus() == 200);
213 public void testValidRequestHeader() throws CrudException {
214 TestHeaders testHeaders = new TestHeaders();
215 mockService.validateRequestHeader(testHeaders);
219 public void testInvalidRequestHeaderXTransactionId() throws CrudException {
220 thrown.expect(CrudException.class);
221 thrown.expectMessage("Invalid request, Missing X-TransactionId header");
223 TestHeaders testHeaders = new TestHeaders();
224 testHeaders.clearRequestHeader("X-TransactionId");
225 mockService.validateRequestHeader(testHeaders);
229 public void testInvalidRequestHeaderXFromAppId() throws CrudException {
230 thrown.expect(CrudException.class);
231 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
233 TestHeaders testHeaders = new TestHeaders();
234 testHeaders.clearRequestHeader("X-FromAppId");
235 mockService.validateRequestHeader(testHeaders);
239 public void testRequestHeaderWithMsId() throws CrudException {
240 thrown.expect(CrudException.class);
241 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
243 TestHeaders testHeaders = new TestHeaders();
244 testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
245 mockService.validateRequestHeader(testHeaders);
249 public void testEmptyRequestHeader() throws CrudException {
250 thrown.expect(CrudException.class);
251 thrown.expectMessage("Invalid request, Missing X-FromAppId header");
253 TestHeaders testHeaders = new TestHeaders();
254 testHeaders.clearRequestHeader("X-TransactionId", "X-FromAppId");
255 mockService.validateRequestHeader(testHeaders);
259 public void testBulk() throws CrudException, IOException {
262 File bulkFile = new File("src/test/resources/payloads/bulk.json");
263 String payloadStr = readFileToString(bulkFile);
264 System.out.println(payloadStr);
266 response = mockService.addBulk(payloadStr, "v11", "",
267 "services/inventory/v11", new TestHeaders(), null, new TestRequest());
268 System.out.println("Bulk Response: " + response.getStatus() + "\n" + response.getEntity().toString());
269 assertTrue(response.getStatus() == 200);
272 public static String readFileToString(File aFile) throws IOException {
274 BufferedReader br = new BufferedReader(new FileReader(aFile));
276 StringBuilder sb = new StringBuilder();
277 String line = br.readLine();
279 while (line != null) {
281 line = br.readLine();
284 return sb.toString().replaceAll("\\s+", "");
288 } catch (IOException e) {
289 fail("Unexpected IOException: " + e.getMessage());