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