Adding interfaces in documentation
[aai/sparky-be.git] / src / test / java / org / onap / aai / sparky / viewandinspect / SearchServletTest.java
1 /**
2  * ============LICENSE_START===================================================
3  * SPARKY (AAI UI service)
4  * ============================================================================
5  * Copyright © 2017 AT&T Intellectual Property.
6  * Copyright © 2017 Amdocs
7  * All rights reserved.
8  * ============================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=====================================================
21  *
22  * ECOMP and OpenECOMP are trademarks
23  * and service marks of AT&T Intellectual Property.
24  */
25
26 package org.onap.aai.sparky.viewandinspect;
27
28 /*
29 import org.openecomp.sparky.config.oxm.OxmEntityDescriptor;
30 import org.openecomp.sparky.config.oxm.OxmModelLoader;
31 import org.openecomp.sparky.dal.elasticsearch.SearchAdapter;
32 import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestDocumentEntity;
33 import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestDocumentEntityFields;
34 import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestElasticHitEntity;
35 import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestElasticHitsEntity;
36 import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestElasticSearchResponse;
37 import org.openecomp.sparky.dal.elasticsearch.entity.BucketEntity;
38 import org.openecomp.sparky.dal.elasticsearch.entity.ElasticHitsEntity;
39 import org.openecomp.sparky.dal.elasticsearch.entity.ElasticSearchAggegrationResponse;
40 import org.openecomp.sparky.dal.elasticsearch.entity.ElasticSearchAggregation;
41 import org.openecomp.sparky.dal.elasticsearch.entity.ElasticSearchCountResponse;
42 import org.openecomp.sparky.dal.elasticsearch.entity.PayloadEntity;
43 import org.openecomp.sparky.dal.rest.OperationResult;
44 import org.openecomp.sparky.dal.sas.config.SearchServiceConfig;
45 import org.openecomp.sparky.dal.sas.entity.EntityCountResponse;
46 import org.openecomp.sparky.dal.sas.entity.GroupByAggregationResponseEntity;
47 import org.openecomp.sparky.dal.sas.entity.SearchAbstractionEntityBuilder;
48 import org.openecomp.sparky.search.VnfSearchService;
49 import org.openecomp.sparky.search.config.SuggestionConfig;
50 import org.openecomp.sparky.search.filters.FilteredSearchHelper;
51 import org.openecomp.sparky.search.filters.entity.UiFilterEntity;
52 import org.openecomp.sparky.search.filters.entity.UiFilterValueEntity;
53 import org.openecomp.sparky.search.filters.entity.UiFiltersEntity;
54 import org.openecomp.sparky.suggestivesearch.SuggestionEntity;
55 import org.openecomp.sparky.util.ExceptionHelper;
56 import org.openecomp.sparky.util.HttpServletHelper;
57 import org.openecomp.sparky.util.NodeUtils;
58 import org.openecomp.sparky.viewandinspect.entity.QuerySearchEntity;
59 import org.openecomp.sparky.viewandinspect.entity.SearchResponse;
60 import org.slf4j.MDC;
61
62 import org.onap.aai.cl.mdc.MdcContext;
63 import com.fasterxml.jackson.core.JsonProcessingException;
64 import com.fasterxml.jackson.databind.ObjectMapper;
65 import com.fasterxml.jackson.databind.SerializationFeature;
66 import com.fasterxml.jackson.databind.node.ObjectNode;
67 import com.google.common.net.MediaType;
68
69
70 /**
71  * The Class SearchServletTest.
72  */
73
74 /*public class SearchServletTest {
75
76   private static final String VNF_ROUTE = "vnf";
77   private static final String VIEW_INSPECT_ROUTE = "viewInspect";
78   
79   private HttpServletRequest commonRequest = null;
80   private HttpServletResponse commonResponse = null;
81   private PrintWriter printWriter = null;
82   private StringWriter responseStringWriter = null;
83   private SearchServiceWrapper searchWrapper = null;
84   private SearchAdapter searchAdapter = null;
85   private VnfSearchService vnfSearchService = null;
86   private ObjectMapper mapper = null;
87   private SecureRandom rand = null;
88   private OxmModelLoader loader;
89   private Map<String, OxmEntityDescriptor> descriptors = null;
90   private SuggestionConfig suggestionConfig = null;
91   private SearchServiceConfig esConfig = null;
92   
93   @BeforeClass
94   public static void initBeforeClass() throws IOException {
95     if (null == System.getProperty("CONFIG_HOME")) {
96       /* Set "CONFIG_HOME" environment variable so path of filter & view schema files are correct when
97       they're loaded during SearchServiceWrapper instantiation */
98 /*      String configHomePath = (new File(".").getCanonicalPath() + "/appconfig-local").replace('\\', '/');
99       System.setProperty("CONFIG_HOME", configHomePath);
100     }
101   }
102   
103   /**
104    * Inits the.
105    *
106    * @throws Exception the exception
107    */
108 /*  @Before
109   public void init() throws Exception {
110     commonRequest = HttpServletHelper.getMockHttpServletRequest();
111     responseStringWriter = new StringWriter();
112     printWriter = new PrintWriter(responseStringWriter);
113     commonResponse = HttpServletHelper.getMockHttpServletResponse(printWriter);
114     mapper = new ObjectMapper();
115
116     // permit serialization of objects with no members
117     mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
118     
119     rand = new SecureRandom();
120
121     loader = Mockito.mock(OxmModelLoader.class); 
122     descriptors = new HashMap<String, OxmEntityDescriptor>();
123
124     esConfig = new SearchServiceConfig();
125     suggestionConfig = SuggestionConfig.getConfig();
126     
127     // Use SearchServiceWrapper and VnfSearchService for suggestionConfig
128     Map<String, String> svcs = new HashMap<String, String>();
129     svcs.put("autosuggestIndexname", "SearchServiceWrapper");
130     svcs.put("indexName", "VnfSearchService");
131     suggestionConfig.setSearchIndexToSearchService(svcs);
132     
133     esConfig.setIndexName("esi-localhost");
134     esConfig.setType("default");
135
136     searchAdapter = Mockito.mock(SearchAdapter.class);
137     vnfSearchService = Mockito.mock(VnfSearchService.class);
138
139     initializeEntityDescriptors();
140
141     searchWrapper = new SearchServiceWrapper();
142     searchWrapper.setSasConfig(esConfig);
143     searchWrapper.setSearch(searchAdapter);
144     searchWrapper.setVnfSearch(vnfSearchService);
145     searchWrapper.setSuggestionConfig(suggestionConfig);
146     searchWrapper.setOxmModelLoader(loader);
147   }
148
149   @Test
150   public void validateAccessors() {
151     assertNotNull("Vnf Search Service should not be null", searchWrapper.getVnfSearch());    
152   }
153   
154   @Test
155   public void validateInitializer() {
156
157     try {
158       assertNotNull("Oxm Model loader should not be null", searchWrapper.getOxmModelLoader());
159       assertNotNull("SearchAbstractionConfig should not be null", searchWrapper.getSasConfig());
160       assertNotNull("SearchAdapter should not be null", searchWrapper.getSearch());
161       assertNotNull("Suggestion Config should not be null", searchWrapper.getSuggestionConfig());
162       assertNotNull("VnfSearchService should not be null", searchWrapper.getVnfSearch());
163       
164       searchWrapper.setOxmModelLoader(null);
165       searchWrapper.setSasConfig(null);
166       searchWrapper.setSearch(null);
167       searchWrapper.setSuggestionConfig(null);
168       searchWrapper.setVnfSearch(null);
169
170       assertNull("Oxm Model loader should be null", searchWrapper.getOxmModelLoader());
171       assertNull("SearchAbstractionConfig should be null", searchWrapper.getSasConfig());
172       assertNull("SearchAdapter should be null", searchWrapper.getSearch());
173       assertNull("Suggestion Config should be null", searchWrapper.getSuggestionConfig());
174       assertNull("VnfSearchService should be null", searchWrapper.getVnfSearch());
175
176     } catch (Exception exc) {
177       fail("Servlet Initialization Failed with error = " + exc.getMessage());
178     }
179
180   }
181   
182   /**
183    * Test doGet() and doPost() for a non-existent end-point.  A test objective would be 
184    * to either return a 404 Not Found.
185    */
186  /* @Test
187   public void validateMdcContextLoggingVariablesWhenExplicitlySet() {
188     
189     final String transactionId = "1234";
190     final String serviceName = "AAI-UI";
191     final String partnerName = "SparkyApp";
192     
193     HttpServletHelper.assignRequestHeader(commonRequest, "X-TransactionId", transactionId);
194     HttpServletHelper.assignRequestHeader(commonRequest, "X-FromAppId", partnerName);
195     
196     HttpServletHelper.assignRequestUri(commonRequest, "search/this/path/does/not/exist/");
197     
198     try {
199       
200       /*
201        * Testing the doGet() operation will hit the doPost() operation in the servlet as well
202        */
203
204     /*  OperationResult result = doEvaluationTestMDC(true, commonRequest, commonResponse);
205       
206       assertEquals(transactionId,MDC.get(MdcContext.MDC_REQUEST_ID));
207       assertEquals(serviceName,MDC.get(MdcContext.MDC_SERVICE_NAME));
208       assertEquals(partnerName,MDC.get(MdcContext.MDC_PARTNER_NAME));
209
210     } catch (Exception exc) {
211       exc.printStackTrace();
212       fail("Unexpected exception = " + exc.getLocalizedMessage());
213     }
214
215   }
216   
217   /**
218    * Test doGet() and doPost() for a non-existent end-point.  A test objective would be 
219    * to either return a 404 Not Found.
220    */
221  /* @Test
222   public void validateMdcContextLoggingVariablesWhenNotExplicitlySet() {
223     
224     /*final String transactionId = "1234";
225     final String serviceName = "AAI-UI";
226     final String partnerName = "SparkyApp";
227     
228     HttpServletHelper.assignRequestHeader(commonRequest, "X-TransactionId", transactionId);
229     HttpServletHelper.assignRequestHeader(commonRequest, "X-FromAppId", serviceName);*/
230     
231 /*    HttpServletHelper.assignRequestUri(commonRequest, "search/this/path/does/not/exist/");
232     
233     try {
234
235       /*
236        * Testing the doGet() operation will hit the doPost() operation in the servlet as well
237        */
238
239   /*   OperationResult result = doEvaluationTestMDC(true, commonRequest, commonResponse);
240       
241       assertNotNull(MDC.get(MdcContext.MDC_REQUEST_ID));
242       assertNotNull(MDC.get(MdcContext.MDC_SERVICE_NAME));
243       assertNotNull(MDC.get(MdcContext.MDC_PARTNER_NAME));
244
245     } catch (Exception exc) {
246       exc.printStackTrace();
247       fail("Unexpected exception = " + exc.getLocalizedMessage());
248     }
249
250   }
251   
252   
253   
254   /**
255    * Test doGet() and doPost() for a non-existent end-point.  
256    */
257  /* @Test
258   public void validateViewAndInspectSearchError_invalidRequestUri() {
259     
260     HttpServletHelper.assignRequestUri(commonRequest, "search/this/path/does/not/exist/");
261     
262     try {
263
264       /*
265        * Testing the doGet() operation will hit the doPost() operation in the servlet as well
266        */
267 /*
268       OperationResult result = doEvaluation(true, commonRequest, commonResponse);
269       assertEquals(404, result.getResultCode());
270       assertTrue(result.getResult().contains("Ignored request-uri"));
271
272     } catch (Exception exc) {
273       exc.printStackTrace();
274       fail("Unexpected exception = " + exc.getLocalizedMessage());
275     }
276
277   }
278   
279   /**
280    * Test doGet() and doPost() for Unified Query Search success path  
281    */
282 /*  @Test
283   public void validateQuerySearch_successPath() {
284
285     try {
286
287       QuerySearchEntity searchEntity = new QuerySearchEntity();
288       searchEntity.setMaxResults("10");
289       searchEntity.setQueryStr("the quick brown fox");
290
291       HttpServletHelper.assignRequestUri(commonRequest, "search/querysearch"); 
292       HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(),
293           NodeUtils.convertObjectToJson(searchEntity, false));
294
295       
296       // set search-abstraction-response that we expect to get back from real system, but stubbed through a mock
297       // to fulfill collaborator behavior
298
299       OperationResult mockedEntitySearchResponse = new OperationResult();
300       mockedEntitySearchResponse.setResultCode(200);
301       mockedEntitySearchResponse.setResult(NodeUtils.convertObjectToJson(
302           SearchAbstractionEntityBuilder.getSuccessfulEntitySearchResponse(), false));
303
304       // TODO:  make parameters expect certain values to lock in invocation attempt against a specific input sequence
305       Mockito.when(searchAdapter.doPost(anyString(), anyString(), anyString()))
306           .thenReturn(mockedEntitySearchResponse);
307
308       List<SuggestionEntity> autoSuggestions = new ArrayList<SuggestionEntity>();
309
310       autoSuggestions.add(new SuggestionEntity("1234", "vnf", "VNFs", null));
311       autoSuggestions.add(new SuggestionEntity("1111", "vnf", "Created VNFs", null));
312       autoSuggestions.add(new SuggestionEntity("1122", "vnf", "ACTIVE VNFs", null));
313       autoSuggestions.add(new SuggestionEntity("2233", "vnf", "ACTIVE and Error VNFs", null));
314       autoSuggestions.add(new SuggestionEntity("3344", "vnf", "ACTIVE and NOT ORCHESTRATED VNFs", null));
315       autoSuggestions.add(new SuggestionEntity("4455", "vnf", "ACTIVE and Running VNFs", null));
316       autoSuggestions.add(new SuggestionEntity("5566", "vnf", "Activated VNFs", null));
317       autoSuggestions.add(new SuggestionEntity("6677", "vnf", "CAPPED VNFs", null));
318       autoSuggestions.add(new SuggestionEntity("7788", "vnf", "CAPPED and Created VNFs", null));
319       
320       Mockito.when(vnfSearchService.getSuggestionsResults(Mockito.anyObject(), Mockito.anyInt()))
321           .thenReturn(autoSuggestions);
322
323       /*
324        * Testing the doGet() operation will hit the doPost() operation in the servlet as well
325        */
326 /*
327       OperationResult result = doEvaluation(true, commonRequest, commonResponse);
328       
329       
330       assertEquals(200, result.getResultCode());
331       
332       SearchResponse searchResponse = mapper.readValue(result.getResult(), SearchResponse.class);
333       
334       assertEquals(10, searchResponse.getTotalFound());
335       
336       int numVnf = 0;
337       int numViewInspect = 0;
338       
339       for ( SuggestionEntity suggestion : searchResponse.getSuggestions()) {
340       
341         if ( VNF_ROUTE.equals(suggestion.getRoute())) {
342           numVnf++;
343         } else if ( VIEW_INSPECT_ROUTE.equals(suggestion.getRoute())) {
344           numViewInspect++;
345         }
346       }
347
348       assertEquals(5, numVnf);
349       assertEquals(5, numViewInspect);
350       
351       //assertTrue(result.getResult().contains("Ignored request-uri"));
352
353     } catch (Exception exc) {
354       fail("Unexpected exception = " + exc.getLocalizedMessage());
355     }
356
357   }
358   
359   /**
360    * Test doGet() and doPost() for Unified Query Search success path  
361    */
362   /*@Test
363   @Ignore
364   public void validateSummaryByEntityTypeCount_successPath() {
365
366     try {
367
368       HttpServletHelper.assignRequestUri(commonRequest, "search/summarybyentitytype/count");
369       
370       Map<String,String> payloadFields = new HashMap<String,String>();
371       payloadFields.put("hashId", "662d1b57c31df70d7ef57ec53c0ace81578ec77b6bc5de055a57c7547ec122dd");
372       payloadFields.put("groupby", "orchestration-status");
373       
374       HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), NodeUtils.convertObjectToJson(payloadFields, false));
375       
376       /*
377        * In this test we don't want to mock the vnf search service, only it's collaborator
378        * interactions with a REST endpoint.
379        */
380    /*  vnfSearchService = new VnfSearchService();
381       vnfSearchService.setSearch(searchAdapter);
382       searchWrapper.setVnfSearch(vnfSearchService);
383
384       /*
385        * The first network response to mock is the one to elastic search to get the suggestion entity by hash id
386        * 
387        *    http://localhost:9200/entityautosuggestindex-localhost/_search
388        *         {"query":{"term":{"_id":"2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d"}}}
389        */
390       /*
391       AutoSuggestElasticSearchResponse elasticResponse = new AutoSuggestElasticSearchResponse();
392       
393       elasticResponse.setTook(1);
394       
395       elasticResponse.setTimedOut(false);
396       elasticResponse.addShard("total", "5");
397       elasticResponse.addShard("successful", "5");
398       elasticResponse.addShard("failed", "0");
399       
400       AutoSuggestElasticHitEntity elasticHit = new AutoSuggestElasticHitEntity();
401       elasticHit.setIndex("entityautosuggestindex-localhost");
402       elasticHit.setType("default");
403       elasticHit.setId("2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d");
404       elasticHit.setScore("1");
405       
406       AutoSuggestDocumentEntityFields suggestDocFields = new AutoSuggestDocumentEntityFields();
407       suggestDocFields.addInput("VNFs");
408       suggestDocFields.addInput("generic-vnfs");
409       suggestDocFields.setOutput("VNFs");
410       suggestDocFields.setPayload(new PayloadEntity());
411       suggestDocFields.setWeight(100);
412       
413       AutoSuggestDocumentEntity autoSuggestDoc = new AutoSuggestDocumentEntity();
414       autoSuggestDoc.setFields(suggestDocFields);
415       
416       elasticHit.setSource(autoSuggestDoc);
417       
418       AutoSuggestElasticHitsEntity hits = new AutoSuggestElasticHitsEntity();
419       hits.addHit(elasticHit);
420       
421       elasticResponse.setHits(hits);
422       
423       
424       OperationResult mockedSearchResponse = new OperationResult();
425       mockedSearchResponse.setResultCode(200);
426       
427       mockedSearchResponse.setResult(NodeUtils.convertObjectToJson(elasticResponse, false));
428
429       
430       /*
431        * The second response is the count API dip to elastic search
432        */
433       /*
434       ElasticSearchCountResponse countResponse = new ElasticSearchCountResponse();
435       countResponse.setCount(3170);
436       countResponse.addShard("total", "5");
437       countResponse.addShard("successful", "5");
438       countResponse.addShard("failed", "0");
439
440       OperationResult searchResponseForCount = new OperationResult();
441       searchResponseForCount.setResultCode(200);
442       
443       searchResponseForCount.setResult(NodeUtils.convertObjectToJson(countResponse, false));
444
445       // TODO:  make parameters expect certain values to lock in invocation attempt against a specific input sequence
446       Mockito.when(searchAdapter.doPost(anyString(), anyString(), anyString()))
447           .thenReturn(mockedSearchResponse).thenReturn(searchResponseForCount);
448       
449       
450       /*
451        * Testing the doGet() operation will hit the doPost() operation in the servlet as well
452        */
453 /*
454       OperationResult result = doEvaluation(true, commonRequest, commonResponse);
455       
456       
457       assertEquals(200, result.getResultCode());
458       
459       //
460       //{"shards":{"total":"5","failed":"0","successful":"5"},"count":3170}
461       
462      EntityCountResponse entityCountResponse = mapper.readValue(result.getResult(), EntityCountResponse.class);
463       
464      assertEquals(3170, entityCountResponse.getCount());
465
466     } catch (Exception exc) {
467       fail("Unexpected exception = " + exc.getLocalizedMessage());
468     }
469
470   }
471   
472   
473   /**
474    * Test doGet() and doPost() for Unified Query Search success path  
475    */
476   /*@Test
477   @Ignore
478   public void validateSummaryByEntityType_successPath() {
479
480     try {
481
482       HttpServletHelper.assignRequestUri(commonRequest, "search/summarybyentitytype");
483       
484       Map<String,String> payloadFields = new HashMap<String,String>();
485       payloadFields.put("hashId", "662d1b57c31df70d7ef57ec53c0ace81578ec77b6bc5de055a57c7547ec122dd");
486       payloadFields.put("groupby", "orchestration-status");
487       
488       HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), NodeUtils.convertObjectToJson(payloadFields, false));
489       
490       /*
491        * In this test we don't want to mock the vnf search service, only it's collaborator
492        * interactions with a REST endpoint.
493        */
494    /*   vnfSearchService = new VnfSearchService();
495       vnfSearchService.setSearch(searchAdapter);
496       searchWrapper.setVnfSearch(vnfSearchService);
497
498       /*
499        * The first network response to mock is the one to elastic search to get the suggestion entity by hash id
500        * 
501        *    http://localhost:9200/entityautosuggestindex-localhost/_search
502        *         {"query":{"term":{"_id":"2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d"}}}
503        */
504       
505    /*   AutoSuggestElasticSearchResponse elasticResponse = new AutoSuggestElasticSearchResponse();
506       
507       elasticResponse.setTook(1);
508       
509       elasticResponse.setTimedOut(false);
510       elasticResponse.addShard("total", "5");
511       elasticResponse.addShard("successful", "5");
512       elasticResponse.addShard("failed", "0");
513       
514       AutoSuggestElasticHitEntity elasticHit = new AutoSuggestElasticHitEntity();
515       elasticHit.setIndex("entityautosuggestindex-localhost");
516       elasticHit.setType("default");
517       elasticHit.setId("2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d");
518       elasticHit.setScore("1");
519       
520       AutoSuggestDocumentEntityFields suggestDocFields = new AutoSuggestDocumentEntityFields();
521       suggestDocFields.addInput("VNFs");
522       suggestDocFields.addInput("generic-vnfs");
523       suggestDocFields.setOutput("VNFs");
524       suggestDocFields.setPayload(new PayloadEntity());
525       suggestDocFields.setWeight(100);
526       
527       AutoSuggestDocumentEntity autoSuggestDoc = new AutoSuggestDocumentEntity();
528       autoSuggestDoc.setFields(suggestDocFields);
529       
530       elasticHit.setSource(autoSuggestDoc);
531       
532       AutoSuggestElasticHitsEntity hits = new AutoSuggestElasticHitsEntity();
533       hits.addHit(elasticHit);
534       
535       elasticResponse.setHits(hits);
536       
537       
538       OperationResult mockedSearchResponse = new OperationResult();
539       mockedSearchResponse.setResultCode(200);
540       
541       mockedSearchResponse.setResult(NodeUtils.convertObjectToJson(elasticResponse, false));
542
543       
544       /*
545        * The second response is the aggregation API dip to elastic search
546        */
547       /*
548       ElasticSearchAggegrationResponse aggResponse = new ElasticSearchAggegrationResponse();
549       
550       aggResponse.setTook(20);
551       aggResponse.setTimedOut(false);
552       
553       aggResponse.addShard("total","5");
554       aggResponse.addShard("successful","5");
555       aggResponse.addShard("failed","0");
556       
557       ElasticHitsEntity hitsEntity = new ElasticHitsEntity();
558       
559       hitsEntity.setTotal(3170);
560       hitsEntity.setMaxScore(0);
561
562       aggResponse.setHits(hitsEntity);
563       
564       ElasticSearchAggregation defaultAggregation = new ElasticSearchAggregation();
565       
566       defaultAggregation.setDocCountErrorUpperBound(0);
567       defaultAggregation.setSumOtherDocCount(0);
568       defaultAggregation.addBucket(new BucketEntity("created",1876));
569       defaultAggregation.addBucket(new BucketEntity("Created",649));
570       defaultAggregation.addBucket(new BucketEntity("Activated",158));
571       defaultAggregation.addBucket(new BucketEntity("active",59));
572       defaultAggregation.addBucket(new BucketEntity("NOT ORCHESTRATED",42));
573       defaultAggregation.addBucket(new BucketEntity("Pending-Create",10));
574       defaultAggregation.addBucket(new BucketEntity("Running",9));
575       defaultAggregation.addBucket(new BucketEntity("Configured",7));
576       defaultAggregation.addBucket(new BucketEntity("pending-create",7));
577       defaultAggregation.addBucket(new BucketEntity("Error",3));
578       defaultAggregation.addBucket(new BucketEntity("planned",3));
579       defaultAggregation.addBucket(new BucketEntity("PLANNED",2));
580       defaultAggregation.addBucket(new BucketEntity("ERROR",1));
581       defaultAggregation.addBucket(new BucketEntity("RUNNING",1));
582       defaultAggregation.addBucket(new BucketEntity("example-orchestration-status-val-6176",1));
583       
584       aggResponse.addAggregation("default", defaultAggregation);
585       
586       OperationResult searchResponseForAggregation = new OperationResult();
587       searchResponseForAggregation.setResultCode(200);
588       
589       searchResponseForAggregation.setResult(NodeUtils.convertObjectToJson(aggResponse, false));
590
591       // TODO:  make parameters expect certain values to lock in invocation attempt against a specific input sequence
592       Mockito.when(searchAdapter.doPost(anyString(), anyString(), anyString()))
593           .thenReturn(mockedSearchResponse).thenReturn(searchResponseForAggregation);
594       
595       
596       /*
597        * Testing the doGet() operation will hit the doPost() operation in the servlet as well
598        */
599 /*
600       OperationResult result = doEvaluation(true, commonRequest, commonResponse);
601       
602       
603       assertEquals(200, result.getResultCode());
604       
605       //
606       //{"shards":{"total":"5","failed":"0","successful":"5"},"count":3170}
607       
608      GroupByAggregationResponseEntity groupByResponse = mapper.readValue(result.getResult(), GroupByAggregationResponseEntity.class);
609       
610      assertEquals(2828, groupByResponse.getAggEntity().getTotalChartHits());
611      assertEquals(15, groupByResponse.getAggEntity().getBuckets().size());
612
613     } catch (Exception exc) {
614       fail("Unexpected exception = " + exc.getLocalizedMessage());
615     }
616   }
617   
618   @Test
619   public void validateHandleDiscoverSearchFilters_vnfSearchViewName() throws IOException {
620     String requestBody = "{ \"viewName\" : \"VnfSearch\" }";
621     String expectedResponse = "{\"filters\":[{\"filterId\":\"1\",\"filterName\":\"Orchestration-Status\",\"displayName\":\"Orchestration Status\",\"dataType\":\"list\"},{\"filterId\":\"2\",\"filterName\":\"Prov-Status\",\"displayName\":\"Provisioning Status\",\"dataType\":\"list\"}]}";
622
623     HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilters");
624     HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
625     
626     OperationResult result = doEvaluation(true, commonRequest, commonResponse);
627     
628     assertEquals(expectedResponse, result.getResult().trim());
629   }
630
631   @Test
632   public void validateFilterAggregation_successPath() {
633     String requestBodyFilePath = "filters/filterAggregationEndpoint_successPath_requestBody.json";
634     String expectedResponseFilePath = "filters/filterAggregationEndpoint_successPath_expectedResponse.json";
635     String operationResultFilePath = "filters/filterAggregationEndpoint_successPath_operationResult.json";
636
637     String requestBody = getResourceFileContents(requestBodyFilePath);
638     String expectedResponse = getResourceFileContents(expectedResponseFilePath);
639
640     HttpServletHelper.assignRequestUri(commonRequest, "search/filterAggregation");
641     HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
642
643     OperationResult operationResult = new OperationResult();
644     operationResult.setResult(getResourceFileContents(operationResultFilePath));
645     
646     vnfSearchService = new VnfSearchService();
647     vnfSearchService.setSearch(searchAdapter);
648     searchWrapper.setVnfSearch(vnfSearchService);
649
650     Mockito.when(searchAdapter.doPost(anyString(), anyString(), anyString())).thenReturn(operationResult);
651
652     OperationResult result = doEvaluation(true, commonRequest, commonResponse);
653
654     assertEquals(expectedResponse.trim(), result.getResult().trim());
655   }
656   
657   @Test
658   public void validateFilterAggregation_emptyRequestFilterArray() throws IOException {
659     String requestBodyFilePath = "filters/filterAggregationEndpoint_emptyRequestFilterArray_requestBody.json";
660     String expectedResponseFilePath = "filters/filterAggregationEndpoint_emptyRequestFilterArray_expectedResponse.json";
661
662     String requestBody = getResourceFileContents(requestBodyFilePath);
663     String expectedResponse = getResourceFileContents(expectedResponseFilePath);
664
665     HttpServletHelper.assignRequestUri(commonRequest, "search/filterAggregation");
666     HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
667
668     vnfSearchService = new VnfSearchService();
669     vnfSearchService.setSearch(searchAdapter);
670     searchWrapper.setVnfSearch(vnfSearchService);
671
672     OperationResult result = doEvaluation(true, commonRequest, commonResponse);
673
674     assertEquals(expectedResponse.trim(), result.getResult().trim());
675   }
676   
677   @Test
678   public void validateFilterAggregation_emptyRequestBody() throws IOException {
679     String expectedResponseFilePath = "filters/filterAggregationEndpoint_emptyRequestBody_expectedResponse.json";
680
681     String expectedResponse = getResourceFileContents(expectedResponseFilePath);
682
683     HttpServletHelper.assignRequestUri(commonRequest, "search/filterAggregation");
684     HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), "{}");
685
686     vnfSearchService = new VnfSearchService();
687     vnfSearchService.setSearch(searchAdapter);
688     searchWrapper.setVnfSearch(vnfSearchService);
689
690     OperationResult result = doEvaluation(true, commonRequest, commonResponse);
691
692     assertEquals(expectedResponse.trim(), result.getResult().trim());
693   }
694
695   @Test
696   public void validateHandleDiscoverSearchFilters_diuiViewName() throws IOException {
697     String requestBody = "{ \"viewName\" : \"dataIntegrity\" }";
698     String expectedResponse = "{\"filters\":[{\"filterId\":\"3\",\"filterName\":\"Severity\",\"displayName\":\"Severity\",\"dataType\":\"list\"},{\"filterId\":\"4\",\"filterName\":\"Category\",\"displayName\":\"Category\",\"dataType\":\"list\"},{\"filterId\":\"5\",\"filterName\":\"Date\",\"displayName\":\"Date\",\"dataType\":\"date\"},{\"filterId\":\"6\",\"filterName\":\"EntityType\",\"displayName\":\"Entity Type\",\"dataType\":\"list\"}]}";
699
700     HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilters");
701     HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
702     
703     OperationResult result = doEvaluation(true, commonRequest, commonResponse);
704     
705     assertEquals(expectedResponse, result.getResult().trim());
706   }
707
708   @Test
709   public void validateHandleDiscoverSearchFilterValues_validId() throws IOException {
710     String requestBody = "{ \"filterIdList\" : [ { \"filterId\" : \"1\" } ] }";
711     String expectedResponse = "{\"filters\":[{\"filterId\":\"1\",\"filterName\":\"Orchestration-Status\",\"displayName\":\"Orchestration Status\",\"dataType\":\"list\",\"filterValueList\":[{\"filterValue\":\"created\",\"displayName\":\"created\"}]}]}";
712
713     HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilterValues");
714     HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
715
716     FilteredSearchHelper filteredSearchHelper = Mockito.mock(FilteredSearchHelper.class);
717     searchWrapper.setFilteredSearchHelper(filteredSearchHelper);
718
719     UiFilterValueEntity uiFilterValueEntity = new UiFilterValueEntity(null, "created", "created");
720
721     UiFilterEntity uiFilterEntity = new UiFilterEntity();
722     uiFilterEntity.setDataType("list");
723     uiFilterEntity.setDisplayName("Orchestration Status");
724     uiFilterEntity.setFilterId("1");
725     uiFilterEntity.setFilterName("Orchestration-Status");
726     uiFilterEntity.addFilterValue(uiFilterValueEntity);
727
728     UiFiltersEntity uiFiltersEntity = new UiFiltersEntity();
729     uiFiltersEntity.addFilter(uiFilterEntity);
730
731     Mockito.when(filteredSearchHelper.doFilterEnumeration(Mockito.anyList()))
732       .thenReturn(uiFiltersEntity);
733
734     OperationResult result = doEvaluation(true, commonRequest, commonResponse);
735
736     assertEquals(expectedResponse, result.getResult().trim());
737   }
738   
739   @Test
740   public void validateHandleDiscoverSearchFilterValues_multipleValidIds() throws IOException {
741     String requestBody = "{ \"filterIdList\" : [ { \"filterId\" : \"1\" }, { \"filterId\" : \"2\" } ] }";
742     String expectedResponse = "{\"filters\":[{\"filterId\":\"1\",\"filterName\":\"Orchestration-Status\",\"displayName\":\"Orchestration Status\",\"dataType\":\"list\",\"filterValueList\":[{\"filterValue\":\"created\",\"displayName\":\"created\"}]},{\"filterId\":\"2\",\"filterName\":\"Prov-Status\",\"displayName\":\"Provisioning Status\",\"dataType\":\"list\",\"filterValueList\":[{\"filterValue\":\"active\",\"displayName\":\"active\"}]}]}";
743
744     HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilterValues");
745     HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
746
747     FilteredSearchHelper filteredSearchHelper = Mockito.mock(FilteredSearchHelper.class);
748     searchWrapper.setFilteredSearchHelper(filteredSearchHelper);
749     
750     UiFiltersEntity uiFiltersEntity = new UiFiltersEntity();
751
752     UiFilterValueEntity uiFilter1ValueEntity = new UiFilterValueEntity(null, "created", "created");
753     UiFilterEntity uiFilterEntity1 = new UiFilterEntity();
754     uiFilterEntity1.setDataType("list");
755     uiFilterEntity1.setDisplayName("Orchestration Status");
756     uiFilterEntity1.setFilterId("1");
757     uiFilterEntity1.setFilterName("Orchestration-Status");
758     uiFilterEntity1.addFilterValue(uiFilter1ValueEntity);
759     uiFiltersEntity.addFilter(uiFilterEntity1);
760     
761     UiFilterValueEntity uiFilter2ValueEntity = new UiFilterValueEntity(null, "active", "active");
762     UiFilterEntity uiFilterEntity2 = new UiFilterEntity();
763     uiFilterEntity2.setDataType("list");
764     uiFilterEntity2.setDisplayName("Provisioning Status");
765     uiFilterEntity2.setFilterId("2");
766     uiFilterEntity2.setFilterName("Prov-Status");
767     uiFilterEntity2.addFilterValue(uiFilter2ValueEntity);
768     uiFiltersEntity.addFilter(uiFilterEntity2);
769
770     Mockito.when(filteredSearchHelper.doFilterEnumeration(Mockito.anyList()))
771       .thenReturn(uiFiltersEntity);
772
773     OperationResult result = doEvaluation(true, commonRequest, commonResponse);
774
775     assertEquals(expectedResponse, result.getResult().trim());
776   }
777
778   @Test
779   public void validateHandleDiscoverSearchFilterValues_invalidId() throws IOException {
780     String requestBody = "{ \"filterIdList\" : [ { \"filterId\" : \"999\" } ] }";
781     String expectedResponse = "{\"filters\":[]}";
782
783     HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilterValues");
784     HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
785
786     OperationResult result = doEvaluation(true, commonRequest, commonResponse);
787
788     assertEquals(expectedResponse, result.getResult().trim());
789   }
790   
791   @Test
792   public void validateHandleDiscoverSearchFilterValues_validIdAndInvalidId() throws IOException {
793     String requestBody = "{ \"filterIdList\" : [ { \"filterId\" : \"1\" }, { \"filterId\" : \"999\" } ] }";
794     String expectedResponse = "{\"filters\":[{\"filterId\":\"1\",\"filterName\":\"Orchestration-Status\",\"displayName\":\"Orchestration Status\",\"dataType\":\"list\",\"filterValueList\":[{\"filterValue\":\"created\",\"displayName\":\"created\"}]}]}";
795
796     HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilterValues");
797     HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
798
799     FilteredSearchHelper filteredSearchHelper = Mockito.mock(FilteredSearchHelper.class);
800     searchWrapper.setFilteredSearchHelper(filteredSearchHelper);
801
802     UiFilterValueEntity uiFilterValueEntity = new UiFilterValueEntity(null, "created", "created");
803
804     UiFilterEntity uiFilterEntity = new UiFilterEntity();
805     uiFilterEntity.setDataType("list");
806     uiFilterEntity.setDisplayName("Orchestration Status");
807     uiFilterEntity.setFilterId("1");
808     uiFilterEntity.setFilterName("Orchestration-Status");
809     uiFilterEntity.addFilterValue(uiFilterValueEntity);
810
811     UiFiltersEntity uiFiltersEntity = new UiFiltersEntity();
812     uiFiltersEntity.addFilter(uiFilterEntity);
813
814     Mockito.when(filteredSearchHelper.doFilterEnumeration(Mockito.anyList()))
815       .thenReturn(uiFiltersEntity);
816
817     OperationResult result = doEvaluation(true, commonRequest, commonResponse);
818
819     assertEquals(expectedResponse, result.getResult().trim());
820   }
821   
822   /**
823    * Builds the resource entity descriptor.
824    *
825    * @param entityType the entity type
826    * @param attributeNames the attribute names
827    * @param searchableAttributes the searchable attributes
828    * @return the oxm entity descriptor
829    */
830 /* @SuppressWarnings("unchecked")
831   private OxmEntityDescriptor buildResourceEntityDescriptor(String entityType,
832       String attributeNames, String searchableAttributes) {
833     OxmEntityDescriptor descriptor = new OxmEntityDescriptor();
834     descriptor.setEntityName(entityType);
835
836     if (attributeNames != null) {
837       descriptor.setPrimaryKeyAttributeName(Arrays.asList(attributeNames.split(",")));
838     }
839
840     if (searchableAttributes != null) {
841       descriptor.setSearchableAttributes(Arrays.asList(searchableAttributes.split(",")));
842     }
843
844     return descriptor;
845   }
846
847   /**
848    * Initialize entity descriptors.
849    */
850   /*private void initializeEntityDescriptors() {
851     descriptors.put("customer",
852         buildResourceEntityDescriptor("customer", "service-instance-id", "f1,f2,f3"));
853   }
854  
855   /**
856    * Builds the view and inspect search request.
857    *
858    * @param maxResults the max results
859    * @param queryStr the query str
860    * @return the string
861    * @throws JsonProcessingException the json processing exception
862    */
863  /* public String buildViewAndInspectSearchRequest(Integer maxResults, String queryStr)
864       throws JsonProcessingException {
865
866     /*
867      * { "maxResults" : "10", "searchStr" : "<search bar text>" }
868      */
869 /*
870     ObjectNode rootNode = mapper.createObjectNode();
871
872     if (maxResults != null) {
873       rootNode.put("maxResults", maxResults);
874     }
875
876     if (queryStr != null) {
877       rootNode.put("queryStr", queryStr);
878     }
879
880     return NodeUtils.convertObjectToJson(rootNode, true);
881
882   }
883   
884   public String getResourceFileContents(String filePath) {
885     StringBuilder result = new StringBuilder("");
886
887     ClassLoader classLoader = getClass().getClassLoader();
888     File file = new File(classLoader.getResource(filePath).getFile());
889
890     try (Scanner scanner = new Scanner(file)) {
891         while (scanner.hasNextLine()) {
892             String line = scanner.nextLine();
893             result.append(line).append("\n");
894         }
895
896         scanner.close();
897
898     } catch (IOException e) {
899         e.printStackTrace();
900     }
901
902     return result.toString();
903   }
904
905
906   /**
907    * Do evaluation.
908    *
909    * @param doGet the do get
910    * @param req the req
911    * @param res the res
912    * @return the string
913    *//*
914   private OperationResult doEvaluationTestMDC(boolean doGet, HttpServletRequest req, HttpServletResponse res) {
915
916     /*
917      * Test method invocation
918      */
919 /*
920     SearchServlet searchServlet = new SearchServlet();
921     try {
922       searchServlet.init();
923     } catch (ServletException e) {
924       // TODO Auto-generated catch block
925       e.printStackTrace();
926     }
927     ArgumentCaptor<Integer> responseCodeCaptor = ArgumentCaptor.forClass(Integer.class);
928     
929     try {
930       if (doGet) {
931         searchServlet.doGet(req, res);
932       } else {
933         searchServlet.doPost(req, res);
934       }
935     } catch (ServletException exc) {
936       fail(ExceptionHelper.extractStackTraceElements(5, exc));
937     } catch (IOException exc) {
938       fail(ExceptionHelper.extractStackTraceElements(5, exc));
939     }
940
941     responseStringWriter.flush();
942     Mockito.verify(commonResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
943     
944     OperationResult result = new OperationResult();
945     
946     result.setResultCode(responseCodeCaptor.getValue());
947     result.setResult(responseStringWriter.toString());
948
949     return result;
950
951   }
952   
953   /**
954    * Do evaluation.
955    *
956    * @param doGet the do get
957    * @param req the req
958    * @param res the res
959    * @return the string
960    *//*
961   private OperationResult doEvaluation(boolean doGet, HttpServletRequest req, HttpServletResponse res) {
962
963     /*
964      * Test method invocation
965      */
966  /*   ArgumentCaptor<Integer> responseCodeCaptor = ArgumentCaptor.forClass(Integer.class);
967     
968     try {
969       if (doGet) {
970         searchWrapper.doGet(req, res);
971       } else {
972         searchWrapper.doPost(req, res);
973       }
974     } catch (ServletException exc) {
975       fail(ExceptionHelper.extractStackTraceElements(5, exc));
976     } catch (IOException exc) {
977       fail(ExceptionHelper.extractStackTraceElements(5, exc));
978     }
979
980     responseStringWriter.flush();
981     Mockito.verify(commonResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
982     
983     OperationResult result = new OperationResult();
984     
985     result.setResultCode(responseCodeCaptor.getValue());
986     result.setResult(responseStringWriter.toString());
987
988     return result;
989
990   }
991
992 }*/