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