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