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