Replace deprecated methods in aai-common
[aai/aai-common.git] / aai-core / src / test / java / org / onap / aai / rest / db / HttpEntryTest.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *    http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.aai.rest.db;
22
23 import static org.hamcrest.Matchers.containsString;
24 import static org.hamcrest.Matchers.not;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertThat;
27 import static org.mockito.ArgumentMatchers.any;
28 import static org.mockito.Mockito.doNothing;
29 import static org.mockito.Mockito.when;
30
31 import com.google.gson.JsonObject;
32 import com.google.gson.JsonParser;
33
34 import java.io.UnsupportedEncodingException;
35 import java.net.URI;
36 import java.util.ArrayList;
37 import java.util.Arrays;
38 import java.util.Collection;
39 import java.util.HashSet;
40 import java.util.List;
41 import java.util.Set;
42 import java.util.UUID;
43
44 import javax.ws.rs.core.HttpHeaders;
45 import javax.ws.rs.core.MediaType;
46 import javax.ws.rs.core.MultivaluedHashMap;
47 import javax.ws.rs.core.MultivaluedMap;
48 import javax.ws.rs.core.Response;
49 import javax.ws.rs.core.UriBuilder;
50 import javax.ws.rs.core.UriInfo;
51
52 import org.javatuples.Pair;
53 import org.json.JSONArray;
54 import org.json.JSONObject;
55 import org.junit.Assert;
56 import org.junit.Before;
57 import org.junit.FixMethodOrder;
58 import org.junit.Test;
59 import org.junit.runner.RunWith;
60 import org.junit.runners.MethodSorters;
61 import org.junit.runners.Parameterized;
62 import org.mockito.Mockito;
63 import org.onap.aai.AAISetup;
64 import org.onap.aai.db.props.AAIProperties;
65 import org.onap.aai.exceptions.AAIException;
66 import org.onap.aai.introspection.Introspector;
67 import org.onap.aai.introspection.Loader;
68 import org.onap.aai.introspection.ModelType;
69 import org.onap.aai.parsers.query.QueryParser;
70 import org.onap.aai.rest.ueb.UEBNotification;
71 import org.onap.aai.restcore.HttpMethod;
72 import org.onap.aai.serialization.engines.QueryStyle;
73 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
74 import org.onap.aai.util.AAIConfig;
75
76 @RunWith(value = Parameterized.class)
77 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
78 public class HttpEntryTest extends AAISetup {
79
80     protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json");
81
82     private static final Set<Integer> VALID_HTTP_STATUS_CODES = new HashSet<>();
83
84     static {
85         VALID_HTTP_STATUS_CODES.add(200);
86         VALID_HTTP_STATUS_CODES.add(201);
87         VALID_HTTP_STATUS_CODES.add(204);
88     }
89
90     @Parameterized.Parameter(value = 0)
91     public QueryStyle queryStyle;
92
93     /*
94      * TODO Change the HttpEntry instances accoringly
95      */
96     @Parameterized.Parameters(name = "QueryStyle.{0}")
97     public static Collection<Object[]> data() {
98         return Arrays.asList(new Object[][] {{QueryStyle.TRAVERSAL}, {QueryStyle.TRAVERSAL_URI}});
99     }
100
101     private HttpHeaders httpHeaders;
102
103     private UriInfo uriInfo;
104
105     private MultivaluedMap<String, String> headersMultiMap;
106     private MultivaluedMap<String, String> queryParameters;
107
108     private List<String> aaiRequestContextList;
109
110     private List<MediaType> outputMediaTypes;
111
112     @Before
113     public void setup() {
114
115         httpHeaders = Mockito.mock(HttpHeaders.class);
116         uriInfo = Mockito.mock(UriInfo.class);
117
118         headersMultiMap = new MultivaluedHashMap<>();
119         queryParameters = Mockito.spy(new MultivaluedHashMap<>());
120
121         headersMultiMap.add("X-FromAppId", "JUNIT");
122         headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString());
123         headersMultiMap.add("Real-Time", "true");
124         headersMultiMap.add("Accept", "application/json");
125         headersMultiMap.add("aai-request-context", "");
126
127         outputMediaTypes = new ArrayList<>();
128         outputMediaTypes.add(APPLICATION_JSON);
129
130         aaiRequestContextList = new ArrayList<>();
131         aaiRequestContextList.add("");
132
133         when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes);
134         when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap);
135
136         when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList);
137
138         when(uriInfo.getQueryParameters()).thenReturn(queryParameters);
139         when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters);
140
141         // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable
142         Mockito.doReturn(null).when(queryParameters).remove(any());
143
144         when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON);
145     }
146
147     private Response doRequest(HttpEntry httpEntry, Loader loader, TransactionalGraphEngine dbEngine, HttpMethod method,
148             String uri, String content) throws UnsupportedEncodingException, AAIException {
149         URI uriObject = UriBuilder.fromPath(uri).build();
150         QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject);
151         String objType = uriQuery.getResultType();
152         if (uri.endsWith("relationship")) {
153             objType = "relationship";
154         }
155         Introspector obj;
156         if (method.equals(HttpMethod.GET) || method.equals(HttpMethod.GET_RELATIONSHIP)) {
157             obj = loader.introspectorFromName(objType);
158         } else {
159             obj = loader.unmarshal(objType, content, org.onap.aai.restcore.MediaType.getEnum("application/json"));
160         }
161
162         DBRequest dbRequest =
163                 new DBRequest.Builder(method, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION")
164                         .rawRequestContent(content).build();
165
166         List<DBRequest> dbRequestList = new ArrayList<>();
167         dbRequestList.add(dbRequest);
168
169         Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = httpEntry.process(dbRequestList, "JUNIT");
170         return responsesTuple.getValue1().get(0).getValue1();
171     }
172
173     @Test
174     public void test1PutOnPserver() throws UnsupportedEncodingException, AAIException {
175
176         /*
177          * TODO do the same with uri
178          */
179         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
180         Loader loader = traversalHttpEntry.getLoader();
181         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
182
183         String uri = "/cloud-infrastructure/pservers/pserver/junit-test1";
184         String content = "{\"hostname\":\"junit-test1\"}";
185         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
186         dbEngine.commit();
187         assertEquals("Expected the pserver to be created", 201, response.getStatus());
188     }
189
190     @Test
191     public void test2PutOnPserverNoPInterface() throws UnsupportedEncodingException, AAIException {
192
193         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
194         Loader loader = traversalHttpEntry.getLoader();
195         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
196
197         String uri = "/cloud-infrastructure/pservers/pserver/junit-test2";
198         String content = "{\"hostname\":\"junit-test2\"}";
199         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
200         dbEngine.commit();
201         assertEquals("Expected the pserver to be created", 201, response.getStatus());
202     }
203
204     @Test
205     public void test3PutOnPInterface() {
206         try {
207             traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
208             Loader loader = traversalHttpEntry.getLoader();
209             TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
210
211             String uri = "/cloud-infrastructure/pservers/pserver/junit-test1/p-interfaces/p-interface/p1";
212             String content = "{\"interface-name\":\"p1\"}";
213             Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
214             dbEngine.commit();
215             assertEquals("Expected the p-interface to be created", 201, response.getStatus());
216         } catch (UnsupportedEncodingException | AAIException e) {
217             // TODO Auto-generated catch block
218             e.printStackTrace();
219         }
220     }
221
222     @Test
223     public void test4GetOnPserver() throws UnsupportedEncodingException, AAIException {
224
225         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
226
227         Loader loader = traversalHttpEntry.getLoader();
228         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
229
230         String uri = "/cloud-infrastructure/pservers/pserver/junit-test1";
231         String content = "{\"hostname\":\"junit-test1\", \"equip-type\":\"junit-equip-type\"}";
232         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.GET, uri, content);
233         dbEngine.commit();
234         assertEquals("Expected the pserver to be returned", 200, response.getStatus());
235     }
236
237     @Test
238     public void test5MergePatchOnPserver() throws UnsupportedEncodingException, AAIException {
239
240         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
241
242         Loader loader = traversalHttpEntry.getLoader();
243         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
244
245         String uri = "/cloud-infrastructure/pservers/pserver/junit-test1";
246         String content = "{\"hostname\":\"junit-test1\", \"equip-type\":\"junit-equip-type\"}";
247         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.MERGE_PATCH, uri, content);
248         dbEngine.commit();
249         assertEquals("Expected the pserver to be updated", 200, response.getStatus());
250     }
251
252     private int doDelete(String resourceVersion, String uri, String nodeType)
253             throws UnsupportedEncodingException, AAIException {
254         queryParameters.add("resource-version", resourceVersion);
255         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
256         Loader loader = traversalHttpEntry.getLoader();
257         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
258
259         URI uriObject = UriBuilder.fromPath(uri).build();
260
261         QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject);
262
263         String content = "";
264
265         Introspector obj = loader.introspectorFromName(nodeType);
266
267         DBRequest dbRequest = new DBRequest.Builder(HttpMethod.DELETE, uriObject, uriQuery, obj, httpHeaders, uriInfo,
268                 "JUNIT-TRANSACTION").rawRequestContent(content).build();
269
270         List<DBRequest> dbRequestList = new ArrayList<>();
271         dbRequestList.add(dbRequest);
272
273         Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = traversalHttpEntry.process(dbRequestList, "JUNIT");
274         Response response = responsesTuple.getValue1().get(0).getValue1();
275         dbEngine.commit();
276         return response.getStatus();
277     }
278
279     @Test
280     public void test6DeleteOnPserver() throws UnsupportedEncodingException, AAIException {
281
282         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
283         Loader loader = traversalHttpEntry.getLoader();
284         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
285
286         String uri = "/cloud-infrastructure/pservers/pserver/junit-test1";
287         String content = "";
288         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.GET, uri, content);
289         dbEngine.commit();
290         String msg = response.getEntity().toString();
291         JsonObject jsonObj = JsonParser.parseString(msg).getAsJsonObject();
292         String resourceVersion = "";
293         if (jsonObj.isJsonObject()) {
294             resourceVersion = jsonObj.get("resource-version").getAsString();
295         }
296         assertEquals("Expected the pserver to be deleted", 204,
297                 doDelete(resourceVersion, "/cloud-infrastructure/pservers/pserver/junit-test1", "pserver"));
298     }
299
300     @Test
301     public void test7DeleteOnPserverNoPinterface() throws UnsupportedEncodingException, AAIException {
302
303         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
304         // HttpEntry httpEntry = new HttpEntry(Version.getLatest(), ModelType.MOXY, queryStyle, type);
305         Loader loader = traversalHttpEntry.getLoader();
306         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
307
308         String uri = "/cloud-infrastructure/pservers/pserver/junit-test2";
309         String content = "";
310         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.GET, uri, content);
311         dbEngine.commit();
312         String msg = response.getEntity().toString();
313         JsonObject jsonObj = JsonParser.parseString(msg).getAsJsonObject();
314         String resourceVersion = "";
315         if (jsonObj.isJsonObject()) {
316             resourceVersion = jsonObj.get("resource-version").getAsString();
317         }
318         assertEquals("Expected the pserver to be deleted", 204,
319                 doDelete(resourceVersion, "/cloud-infrastructure/pservers/pserver/junit-test2", "pserver"));
320     }
321
322     @Test
323     public void test8FailedGetOnPserver() throws UnsupportedEncodingException, AAIException {
324
325         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
326         // HttpEntry httpEntry = new HttpEntry(Version.getLatest(), ModelType.MOXY, queryStyle, type);
327         Loader loader = traversalHttpEntry.getLoader();
328         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
329
330         String uri = "/cloud-infrastructure/pservers/pserver/junit-test2";
331         String content = "";
332         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.GET, uri, content);
333         dbEngine.commit();
334
335         assertEquals("Expected the pserver to be deleted", 404, response.getStatus());
336     }
337
338     @Test
339     public void putEdgeTest() throws UnsupportedEncodingException, AAIException {
340
341         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
342         // HttpEntry httpEntry = new HttpEntry(Version.getLatest(), ModelType.MOXY, queryStyle, type);
343         Loader loader = traversalHttpEntry.getLoader();
344         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
345
346         // Put pserver
347         String uri = "/cloud-infrastructure/pservers/pserver/junit-edge-test-pserver";
348         String content = "{\"hostname\":\"junit-edge-test-pserver\"}";
349         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
350         // Put complex
351         uri = "/cloud-infrastructure/complexes/complex/junit-edge-test-complex";
352         content =
353                 "{\"physical-location-id\":\"junit-edge-test-complex\",\"physical-location-type\":\"AAIDefault\",\"street1\":\"AAIDefault\",\"city\":\"AAIDefault\",\"state\":\"NJ\",\"postal-code\":\"07748\",\"country\":\"USA\",\"region\":\"US\"}";
354         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
355
356         // PutEdge
357         uri = "/cloud-infrastructure/complexes/complex/junit-edge-test-complex/relationship-list/relationship";
358         content = "{\"related-to\":\"pserver\",\"related-link\":\"/aai/" + schemaVersions.getDefaultVersion().toString()
359                 + "/cloud-infrastructure/pservers/pserver/junit-edge-test-pserver\",\"relationship-label\":\"org.onap.relationships.inventory.LocatedIn\"}";
360         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT_EDGE, uri, content);
361
362         dbEngine.rollback();
363         assertEquals("Expected the pserver relationship to be created", 200, response.getStatus());
364     }
365
366     @Test
367     public void notificationOnRelatedToTest() throws UnsupportedEncodingException, AAIException {
368
369         Loader ld = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
370         UEBNotification uebNotification = Mockito.spy(new UEBNotification(ld, loaderFactory, schemaVersions));
371         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion(), uebNotification);
372
373         Loader loader = traversalHttpEntry.getLoader();
374         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
375         // Put pserver
376         String uri = "/cloud-infrastructure/pservers/pserver/junit-edge-test-pserver";
377         String content = "{\"hostname\":\"junit-edge-test-pserver\"}";
378         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
379         // Put complex
380         uri = "/cloud-infrastructure/complexes/complex/junit-edge-test-complex";
381         content =
382                 "{\"physical-location-id\":\"junit-edge-test-complex\",\"physical-location-type\":\"AAIDefault\",\"street1\":\"AAIDefault\",\"city\":\"AAIDefault\",\"state\":\"NJ\",\"postal-code\":\"07748\",\"country\":\"USA\",\"region\":\"US\"}";
383         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
384
385         // PutEdge
386         uri = "/cloud-infrastructure/complexes/complex/junit-edge-test-complex/relationship-list/relationship";
387         content = "{\"related-to\":\"pserver\",\"related-link\":\"/aai/" + schemaVersions.getDefaultVersion().toString()
388                 + "/cloud-infrastructure/pservers/pserver/junit-edge-test-pserver\",\"relationship-label\":\"org.onap.relationships.inventory.LocatedIn\"}";
389
390         doNothing().when(uebNotification).triggerEvents();
391         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT_EDGE, uri, content);
392
393         assertEquals("Expected the pserver relationship to be deleted", 200, response.getStatus());
394         assertEquals("Two notifications", 2, uebNotification.getEvents().size());
395         assertEquals("Notification generated for PUT edge", "UPDATE",
396                 uebNotification.getEvents().get(0).getEventHeader().getValue("action").toString());
397         assertThat("Event body for the edge create has the related to",
398                 uebNotification.getEvents().get(0).getObj().marshal(false),
399                 containsString("cloud-infrastructure/pservers/pserver/junit-edge-test-pserver"));
400
401         response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.DELETE_EDGE, uri, content);
402         assertEquals("Expected the pserver relationship to be deleted", 204, response.getStatus());
403         assertEquals("Two notifications", 2, uebNotification.getEvents().size());
404         assertEquals("Notification generated for DELETE edge", "UPDATE",
405                 uebNotification.getEvents().get(0).getEventHeader().getValue("action").toString());
406         assertThat("Event body for the edge delete does not have the related to",
407                 uebNotification.getEvents().get(0).getObj().marshal(false),
408                 not(containsString("cloud-infrastructure/pservers/pserver/junit-edge-test-pserver")));
409         dbEngine.rollback();
410
411     }
412
413     @Test
414     public void putEdgeWrongLabelTest() throws UnsupportedEncodingException, AAIException {
415
416         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
417         // HttpEntry httpEntry = new HttpEntry(Version.getLatest(), ModelType.MOXY, queryStyle, type);
418         Loader loader = traversalHttpEntry.getLoader();
419         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
420
421         // Put pserver
422         String uri = "/cloud-infrastructure/pservers/pserver/junit-edge-test-pserver";
423         String content = "{\"hostname\":\"junit-edge-test-pserver\"}";
424         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
425         // Put complex
426         uri = "/cloud-infrastructure/complexes/complex/junit-edge-test-complex";
427         content =
428                 "{\"physical-location-id\":\"junit-edge-test-complex\",\"physical-location-type\":\"AAIDefault\",\"street1\":\"AAIDefault\",\"city\":\"AAIDefault\",\"state\":\"NJ\",\"postal-code\":\"07748\",\"country\":\"USA\",\"region\":\"US\"}";
429         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
430
431         // PutEdge
432         uri = "/cloud-infrastructure/complexes/complex/junit-edge-test-complex/relationship-list/relationship";
433         content = "{\"related-to\":\"pserver\",\"related-link\":\"/aai/" + schemaVersions.getDefaultVersion().toString()
434                 + "/cloud-infrastructure/pservers/pserver/junit-edge-test-pserver\",\"relationship-label\":\"junk\"}";
435         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT_EDGE, uri, content);
436
437         dbEngine.rollback();
438         String msg = response.getEntity().toString();
439         assertEquals("Expected the pserver to be created", 400, response.getStatus());
440         assertThat(msg, containsString("ERR.5.4.6107"));
441         assertThat(msg, containsString(
442                 "Required Edge-property not found in input data:org.onap.aai.edges.exceptions.EdgeRuleNotFoundException: No rule found for EdgeRuleQuery with filter params node type: complex, node type: pserver, label: junk, type: COUSIN, isPrivate: false"));
443
444     }
445
446     @Test
447     public void pathedFormatOnGetTest() throws UnsupportedEncodingException, AAIException {
448
449         final String testName = new Object() {}.getClass().getEnclosingMethod().getName();
450
451         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
452         // HttpEntry httpEntry = new HttpEntry(schemaVersions.getDefaultVersion(), ModelType.MOXY, QueryStyle.TRAVERSAL,
453         // type);
454         Loader loader = traversalHttpEntry.getLoader();
455         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
456
457         // Put pserver
458         String pserverKey = "pserver-" + testName;
459         String pserverUri = "/cloud-infrastructure/pservers/pserver/" + pserverKey;
460         String content = "{\"hostname\":\"" + pserverKey + "\"}";
461         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, pserverUri, content);
462
463         // Put complex
464         String complexKey = "complex-" + testName;
465         String complexUri = "/cloud-infrastructure/complexes/complex/" + complexKey;
466         content = "{\"physical-location-id\":\"" + complexKey
467                 + "\",\"physical-location-type\":\"AAIDefault\",\"street1\":\"AAIDefault\",\"city\":\"AAIDefault\",\"state\":\"NJ\",\"postal-code\":\"07748\",\"country\":\"USA\",\"region\":\"US\"}";
468         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, complexUri, content);
469
470         // PutEdge
471         String relationshipUri =
472                 "/cloud-infrastructure/complexes/complex/" + complexKey + "/relationship-list/relationship";
473         content = "{\"related-to\":\"pserver\",\"related-link\":\"/aai/" + schemaVersions.getDefaultVersion().toString()
474                 + "/cloud-infrastructure/pservers/pserver/" + pserverKey
475                 + "\",\"relationship-label\":\"org.onap.relationships.inventory.LocatedIn\"}";
476         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT_EDGE, relationshipUri, content);
477
478         // Get pserver with pathed
479         queryParameters.add("format", "pathed");
480         content = "";
481         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.GET, pserverUri, content);
482         queryParameters.remove("format");
483
484         String msg = response.getEntity().toString();
485         assertEquals("Expected get to succeed", 200, response.getStatus());
486         assertThat(msg, containsString(pserverUri));
487
488         dbEngine.rollback();
489
490     }
491
492     @Test
493     public void getAllPserversTest() throws UnsupportedEncodingException, AAIException {
494
495         final String testName = new Object() {}.getClass().getEnclosingMethod().getName();
496
497         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
498         Loader loader = traversalHttpEntry.getLoader();
499         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
500
501         // Put pserver
502         String pserver1Key = "pserver-1-" + testName;
503         String pserver1Uri = "/cloud-infrastructure/pservers/pserver/" + pserver1Key;
504         String content = "{\"hostname\":\"" + pserver1Key + "\"}";
505         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, pserver1Uri, content);
506
507         // Put complex
508         String pserver2Key = "pserver-2-" + testName;
509         String pserver2Uri = "/cloud-infrastructure/pservers/pserver/" + pserver2Key;
510         content = "{\"hostname\":\"" + pserver2Key + "\"}";
511         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, pserver2Uri, content);
512
513         // Get pserver with pathed
514         queryParameters.add("format", "pathed");
515         content = "";
516         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.GET,
517                 "/cloud-infrastructure/pservers", content);
518         queryParameters.remove("format");
519
520         String msg = response.getEntity().toString();
521         assertEquals("Expected get to succeed", 200, response.getStatus());
522         assertThat(msg, containsString(pserver1Uri));
523         assertThat(msg, containsString(pserver2Uri));
524
525         dbEngine.rollback();
526
527     }
528
529     @Test
530     public void testSetGetPaginationMethods() {
531         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
532         traversalHttpEntry.setPaginationBucket(10);
533         traversalHttpEntry.setPaginationIndex(1);
534         traversalHttpEntry.setTotalsForPaging(101, traversalHttpEntry.getPaginationBucket());
535         assertEquals("Expected the pagination bucket size to be 10", 10, traversalHttpEntry.getPaginationBucket());
536         assertEquals("Expected the total number of pagination buckets to be 11", 11,
537                 traversalHttpEntry.getTotalPaginationBuckets());
538         assertEquals("Expected the pagination index to be 1", 1, traversalHttpEntry.getPaginationIndex());
539         assertEquals("Expected the total amount of vertices to be 101", 101, traversalHttpEntry.getTotalVertices());
540     }
541
542     @Test
543     public void relatedToTest() throws UnsupportedEncodingException, AAIException {
544
545         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
546         Loader loader = traversalHttpEntry.getLoader();
547         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
548
549         // Put pserver
550         String uri = "/cloud-infrastructure/pservers/pserver/junit-edge-test-pserver";
551         String content = "{\"hostname\":\"junit-edge-test-pserver\"}";
552         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
553         // Put complex
554         uri = "/cloud-infrastructure/complexes/complex/junit-edge-test-complex";
555         content =
556                 "{\"physical-location-id\":\"junit-edge-test-complex\",\"physical-location-type\":\"AAIDefault\",\"street1\":\"AAIDefault\",\"city\":\"AAIDefault\",\"state\":\"NJ\",\"postal-code\":\"07748\",\"country\":\"USA\",\"region\":\"US\"}";
557         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
558
559         // PutEdge
560         uri = "/cloud-infrastructure/complexes/complex/junit-edge-test-complex/relationship-list/relationship";
561         content = "{\"related-to\":\"pserver\",\"related-link\":\"/aai/" + schemaVersions.getDefaultVersion().toString()
562                 + "/cloud-infrastructure/pservers/pserver/junit-edge-test-pserver\",\"relationship-label\":\"org.onap.relationships.inventory.LocatedIn\"}";
563         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT_EDGE, uri, content);
564
565         // getRelatedTo
566         uri = "/cloud-infrastructure/complexes/complex/junit-edge-test-complex/related-to/pservers";
567         content = "";
568         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.GET, uri, content);
569         String respBody = response.getEntity().toString();
570
571         dbEngine.rollback();
572         assertEquals("Expected the pserver to be created", 200, response.getStatus());
573         assertThat("Related to pserver is returned.", respBody,
574                 containsString("\"hostname\":\"junit-edge-test-pserver\""));
575
576     }
577
578     @Test
579     public void setDepthTest() throws AAIException {
580         System.setProperty("AJSC_HOME", ".");
581         System.setProperty("BUNDLECONFIG_DIR", "src/main/test/resources");
582
583         String depthParam = AAIConfig.get("aai.rest.getall.depthparam");
584         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
585         int depth = traversalHttpEntry.setDepth(null, depthParam);
586         assertEquals(AAIProperties.MAXIMUM_DEPTH.intValue(), depth);
587     }
588
589     @Test
590     public void getAbstractTest() throws UnsupportedEncodingException, AAIException {
591
592         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
593         Loader loader = traversalHttpEntry.getLoader();
594         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
595
596         // Put generic-vnf
597         String uri = "/network/generic-vnfs/generic-vnf/junit-abstract-test-generic-vnf";
598         String content = "{\"vnf-id\":\"junit-abstract-test-generic-vnf\",\"vnf-name\":\"junit-generic-vnf-name\"}";
599         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
600
601         // Put pserver
602         uri = "/cloud-infrastructure/pservers/pserver/junit-abstract-test-pserver";
603         content = "{\"hostname\":\"junit-abstract-test-pserver\"}";
604         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
605
606         // PutEdge
607         uri = "/cloud-infrastructure/pservers/pserver/junit-abstract-test-pserver/relationship-list/relationship";
608         content =
609                 "{\"related-to\":\"vnf\",\"relationship-data\":[{\"relationship-key\":\"vnf.vnf-id\",\"relationship-value\":\"junit-abstract-test-generic-vnf\"}]}";
610         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT_EDGE, uri, content);
611
612         // getRelatedTo
613         uri = "/network/generic-vnfs/generic-vnf/junit-abstract-test-generic-vnf/related-to/pservers";
614         content = "";
615         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.GET, uri, content);
616         String respBody = response.getEntity().toString();
617
618         dbEngine.rollback();
619         assertThat("Related to pserver is returned.", respBody,
620                 containsString("\"hostname\":\"junit-abstract-test-pserver\""));
621     }
622
623     @Test
624     public void getRelationshipListTest() throws UnsupportedEncodingException, AAIException {
625         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
626         Loader loader = traversalHttpEntry.getLoader();
627         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
628
629         // Put pserver
630         String uri = "/cloud-infrastructure/pservers/pserver/httpEntryTest-pserver-01";
631         String content = "{\"hostname\":\"httpEntryTest-pserver-01\"}";
632         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
633         // Put complex
634         uri = "/cloud-infrastructure/complexes/complex/httpEntryTest-complex-01";
635         content =
636                 "{\"physical-location-id\":\"httpEntryTest-complex-01\",\"physical-location-type\":\"AAIDefault\",\"street1\":\"AAIDefault\",\"city\":\"AAIDefault\",\"state\":\"NJ\",\"postal-code\":\"07748\",\"country\":\"USA\",\"region\":\"US\"}";
637         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
638
639         // Put Relationship
640         uri = "/cloud-infrastructure/pservers/pserver/httpEntryTest-pserver-01/relationship-list/relationship";
641         content = "{\"related-to\":\"complex\",\"related-link\":\"/aai/" + schemaVersions.getDefaultVersion().toString()
642                 + "/cloud-infrastructure/complexes/complex/httpEntryTest-complex-01\",\"relationship-label\":\"org.onap.relationships.inventory.LocatedIn\"}"
643                 + "\"relationship-daasSta\":[{" + "\"relationship-key\":\"complex.physical-location-id\","
644                 + "\"relationship-value\":\"httpEntryTest-complex-01\"" + "}]";
645         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT_EDGE, uri, content);
646         assertEquals("Expected the pserver relationship to be created", 200, response.getStatus());
647
648         // Get Relationship
649         uri = "/cloud-infrastructure/pservers/pserver/httpEntryTest-pserver-01";
650         content = "";
651         response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.GET_RELATIONSHIP, uri, content);
652         String expected =
653                 "{\"relationship\":[{\"related-to\":\"complex\",\"relationship-label\":\"org.onap.relationships.inventory.LocatedIn\",\"related-link\":\"/aai/v14/cloud-infrastructure/complexes/complex/httpEntryTest-complex-01\",\"relationship-data\":[{\"relationship-key\":\"complex.physical-location-id\",\"relationship-value\":\"httpEntryTest-complex-01\"}]}]}";
654         Assert.assertEquals(expected, response.getEntity().toString());
655
656         dbEngine.rollback();
657     }
658
659     @Test
660     public void getRelationshipListTestWithFormatSimple() throws UnsupportedEncodingException, AAIException {
661         traversalHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion());
662         Loader loader = traversalHttpEntry.getLoader();
663         TransactionalGraphEngine dbEngine = traversalHttpEntry.getDbEngine();
664
665         // Put pserver
666         String uri = "/cloud-infrastructure/pservers/pserver/httpEntryTest-pserver-01";
667         String content = "{\"hostname\":\"httpEntryTest-pserver-01\"}";
668         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
669         // Put complex
670         uri = "/cloud-infrastructure/complexes/complex/httpEntryTest-complex-01";
671         content =
672                 "{\"physical-location-id\":\"httpEntryTest-complex-01\",\"physical-location-type\":\"AAIDefault\",\"street1\":\"AAIDefault\",\"city\":\"AAIDefault\",\"state\":\"NJ\",\"postal-code\":\"07748\",\"country\":\"USA\",\"region\":\"US\"}";
673         doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT, uri, content);
674
675         // Put Relationship
676         uri = "/cloud-infrastructure/pservers/pserver/httpEntryTest-pserver-01/relationship-list/relationship";
677         content = "{\"related-to\":\"complex\",\"related-link\":\"/aai/" + schemaVersions.getDefaultVersion().toString()
678                 + "/cloud-infrastructure/complexes/complex/httpEntryTest-complex-01\",\"relationship-label\":\"org.onap.relationships.inventory.LocatedIn\"}"
679                 + "\"relationship-daasSta\":[{" + "\"relationship-key\":\"complex.physical-location-id\","
680                 + "\"relationship-value\":\"httpEntryTest-complex-01\"" + "}]";
681         Response response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.PUT_EDGE, uri, content);
682         assertEquals("Expected the pserver relationship to be created", 200, response.getStatus());
683
684         // GET complex
685         uri = "/cloud-infrastructure/pservers/pserver/httpEntryTest-pserver-01";
686         content = "";
687         response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.GET, uri, content);
688
689         // Get Relationship
690         uri = "/cloud-infrastructure/pservers/pserver/httpEntryTest-pserver-01";
691         queryParameters.add("format", "resource");
692         content = "";
693         response = doRequest(traversalHttpEntry, loader, dbEngine, HttpMethod.GET_RELATIONSHIP, uri, content);
694         String responsePayload = response.getEntity().toString();
695         JSONObject responseJsonObject = new JSONObject(responsePayload);
696         JSONArray responseResultsArray = responseJsonObject.getJSONArray("results");
697         String responseResults = responseResultsArray.get(0).toString();
698         JSONObject pserverResponseObject = new JSONObject(responseResults);
699         String pserverResponse = pserverResponseObject.get("pserver").toString();
700         JSONObject pserverResponseFields = new JSONObject(pserverResponse);
701         String pserverResponseRelationshipList = pserverResponseFields.get("relationship-list").toString();
702
703         String expected =
704                 "{\"relationship\":[{\"related-to\":\"complex\",\"relationship-data\":[{\"relationship-value\":\"httpEntryTest-complex-01\",\"relationship-key\":\"complex.physical-location-id\"}],\"related-link\":\"/aai/v14/cloud-infrastructure/complexes/complex/httpEntryTest-complex-01\",\"relationship-label\":\"org.onap.relationships.inventory.LocatedIn\"}]}";
705         assertEquals(expected, pserverResponseRelationshipList);
706         // Assert.assertEquals(expected, response.getEntity().toString());
707         queryParameters.remove("format");
708
709         dbEngine.rollback();
710     }
711
712 }