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