2 * ============LICENSE_START===================================================
3 * SPARKY (AAI UI service)
4 * ============================================================================
5 * Copyright © 2017 AT&T Intellectual Property.
6 * Copyright © 2017 Amdocs
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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=====================================================
22 * ECOMP and OpenECOMP are trademarks
23 * and service marks of AT&T Intellectual Property.
26 package org.onap.aai.sparky.viewandinspect;
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;
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;
71 * The Class SearchServletTest.
74 /*public class SearchServletTest {
76 private static final String VNF_ROUTE = "vnf";
77 private static final String VIEW_INSPECT_ROUTE = "viewInspect";
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;
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);
106 * @throws Exception the exception
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();
116 // permit serialization of objects with no members
117 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
119 rand = new SecureRandom();
121 loader = Mockito.mock(OxmModelLoader.class);
122 descriptors = new HashMap<String, OxmEntityDescriptor>();
124 esConfig = new SearchServiceConfig();
125 suggestionConfig = SuggestionConfig.getConfig();
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);
133 esConfig.setIndexName("esi-localhost");
134 esConfig.setType("default");
136 searchAdapter = Mockito.mock(SearchAdapter.class);
137 vnfSearchService = Mockito.mock(VnfSearchService.class);
139 initializeEntityDescriptors();
141 searchWrapper = new SearchServiceWrapper();
142 searchWrapper.setSasConfig(esConfig);
143 searchWrapper.setSearch(searchAdapter);
144 searchWrapper.setVnfSearch(vnfSearchService);
145 searchWrapper.setSuggestionConfig(suggestionConfig);
146 searchWrapper.setOxmModelLoader(loader);
150 public void validateAccessors() {
151 assertNotNull("Vnf Search Service should not be null", searchWrapper.getVnfSearch());
155 public void validateInitializer() {
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());
164 searchWrapper.setOxmModelLoader(null);
165 searchWrapper.setSasConfig(null);
166 searchWrapper.setSearch(null);
167 searchWrapper.setSuggestionConfig(null);
168 searchWrapper.setVnfSearch(null);
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());
176 } catch (Exception exc) {
177 fail("Servlet Initialization Failed with error = " + exc.getMessage());
183 * Test doGet() and doPost() for a non-existent end-point. A test objective would be
184 * to either return a 404 Not Found.
187 public void validateMdcContextLoggingVariablesWhenExplicitlySet() {
189 final String transactionId = "1234";
190 final String serviceName = "AAI-UI";
191 final String partnerName = "SparkyApp";
193 HttpServletHelper.assignRequestHeader(commonRequest, "X-TransactionId", transactionId);
194 HttpServletHelper.assignRequestHeader(commonRequest, "X-FromAppId", partnerName);
196 HttpServletHelper.assignRequestUri(commonRequest, "search/this/path/does/not/exist/");
201 * Testing the doGet() operation will hit the doPost() operation in the servlet as well
204 /* OperationResult result = doEvaluationTestMDC(true, commonRequest, commonResponse);
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));
210 } catch (Exception exc) {
211 exc.printStackTrace();
212 fail("Unexpected exception = " + exc.getLocalizedMessage());
218 * Test doGet() and doPost() for a non-existent end-point. A test objective would be
219 * to either return a 404 Not Found.
222 public void validateMdcContextLoggingVariablesWhenNotExplicitlySet() {
224 /*final String transactionId = "1234";
225 final String serviceName = "AAI-UI";
226 final String partnerName = "SparkyApp";
228 HttpServletHelper.assignRequestHeader(commonRequest, "X-TransactionId", transactionId);
229 HttpServletHelper.assignRequestHeader(commonRequest, "X-FromAppId", serviceName);*/
231 /* HttpServletHelper.assignRequestUri(commonRequest, "search/this/path/does/not/exist/");
236 * Testing the doGet() operation will hit the doPost() operation in the servlet as well
239 /* OperationResult result = doEvaluationTestMDC(true, commonRequest, commonResponse);
241 assertNotNull(MDC.get(MdcContext.MDC_REQUEST_ID));
242 assertNotNull(MDC.get(MdcContext.MDC_SERVICE_NAME));
243 assertNotNull(MDC.get(MdcContext.MDC_PARTNER_NAME));
245 } catch (Exception exc) {
246 exc.printStackTrace();
247 fail("Unexpected exception = " + exc.getLocalizedMessage());
255 * Test doGet() and doPost() for a non-existent end-point.
258 public void validateViewAndInspectSearchError_invalidRequestUri() {
260 HttpServletHelper.assignRequestUri(commonRequest, "search/this/path/does/not/exist/");
265 * Testing the doGet() operation will hit the doPost() operation in the servlet as well
268 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
269 assertEquals(404, result.getResultCode());
270 assertTrue(result.getResult().contains("Ignored request-uri"));
272 } catch (Exception exc) {
273 exc.printStackTrace();
274 fail("Unexpected exception = " + exc.getLocalizedMessage());
280 * Test doGet() and doPost() for Unified Query Search success path
283 public void validateQuerySearch_successPath() {
287 QuerySearchEntity searchEntity = new QuerySearchEntity();
288 searchEntity.setMaxResults("10");
289 searchEntity.setQueryStr("the quick brown fox");
291 HttpServletHelper.assignRequestUri(commonRequest, "search/querysearch");
292 HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(),
293 NodeUtils.convertObjectToJson(searchEntity, false));
296 // set search-abstraction-response that we expect to get back from real system, but stubbed through a mock
297 // to fulfill collaborator behavior
299 OperationResult mockedEntitySearchResponse = new OperationResult();
300 mockedEntitySearchResponse.setResultCode(200);
301 mockedEntitySearchResponse.setResult(NodeUtils.convertObjectToJson(
302 SearchAbstractionEntityBuilder.getSuccessfulEntitySearchResponse(), false));
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);
308 List<SuggestionEntity> autoSuggestions = new ArrayList<SuggestionEntity>();
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));
320 Mockito.when(vnfSearchService.getSuggestionsResults(Mockito.anyObject(), Mockito.anyInt()))
321 .thenReturn(autoSuggestions);
324 * Testing the doGet() operation will hit the doPost() operation in the servlet as well
327 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
330 assertEquals(200, result.getResultCode());
332 SearchResponse searchResponse = mapper.readValue(result.getResult(), SearchResponse.class);
334 assertEquals(10, searchResponse.getTotalFound());
337 int numViewInspect = 0;
339 for ( SuggestionEntity suggestion : searchResponse.getSuggestions()) {
341 if ( VNF_ROUTE.equals(suggestion.getRoute())) {
343 } else if ( VIEW_INSPECT_ROUTE.equals(suggestion.getRoute())) {
348 assertEquals(5, numVnf);
349 assertEquals(5, numViewInspect);
351 //assertTrue(result.getResult().contains("Ignored request-uri"));
353 } catch (Exception exc) {
354 fail("Unexpected exception = " + exc.getLocalizedMessage());
360 * Test doGet() and doPost() for Unified Query Search success path
364 public void validateSummaryByEntityTypeCount_successPath() {
368 HttpServletHelper.assignRequestUri(commonRequest, "search/summarybyentitytype/count");
370 Map<String,String> payloadFields = new HashMap<String,String>();
371 payloadFields.put("hashId", "662d1b57c31df70d7ef57ec53c0ace81578ec77b6bc5de055a57c7547ec122dd");
372 payloadFields.put("groupby", "orchestration-status");
374 HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), NodeUtils.convertObjectToJson(payloadFields, false));
377 * In this test we don't want to mock the vnf search service, only it's collaborator
378 * interactions with a REST endpoint.
380 /* vnfSearchService = new VnfSearchService();
381 vnfSearchService.setSearch(searchAdapter);
382 searchWrapper.setVnfSearch(vnfSearchService);
385 * The first network response to mock is the one to elastic search to get the suggestion entity by hash id
387 * http://localhost:9200/entityautosuggestindex-localhost/_search
388 * {"query":{"term":{"_id":"2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d"}}}
391 AutoSuggestElasticSearchResponse elasticResponse = new AutoSuggestElasticSearchResponse();
393 elasticResponse.setTook(1);
395 elasticResponse.setTimedOut(false);
396 elasticResponse.addShard("total", "5");
397 elasticResponse.addShard("successful", "5");
398 elasticResponse.addShard("failed", "0");
400 AutoSuggestElasticHitEntity elasticHit = new AutoSuggestElasticHitEntity();
401 elasticHit.setIndex("entityautosuggestindex-localhost");
402 elasticHit.setType("default");
403 elasticHit.setId("2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d");
404 elasticHit.setScore("1");
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);
413 AutoSuggestDocumentEntity autoSuggestDoc = new AutoSuggestDocumentEntity();
414 autoSuggestDoc.setFields(suggestDocFields);
416 elasticHit.setSource(autoSuggestDoc);
418 AutoSuggestElasticHitsEntity hits = new AutoSuggestElasticHitsEntity();
419 hits.addHit(elasticHit);
421 elasticResponse.setHits(hits);
424 OperationResult mockedSearchResponse = new OperationResult();
425 mockedSearchResponse.setResultCode(200);
427 mockedSearchResponse.setResult(NodeUtils.convertObjectToJson(elasticResponse, false));
431 * The second response is the count API dip to elastic search
434 ElasticSearchCountResponse countResponse = new ElasticSearchCountResponse();
435 countResponse.setCount(3170);
436 countResponse.addShard("total", "5");
437 countResponse.addShard("successful", "5");
438 countResponse.addShard("failed", "0");
440 OperationResult searchResponseForCount = new OperationResult();
441 searchResponseForCount.setResultCode(200);
443 searchResponseForCount.setResult(NodeUtils.convertObjectToJson(countResponse, false));
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);
451 * Testing the doGet() operation will hit the doPost() operation in the servlet as well
454 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
457 assertEquals(200, result.getResultCode());
460 //{"shards":{"total":"5","failed":"0","successful":"5"},"count":3170}
462 EntityCountResponse entityCountResponse = mapper.readValue(result.getResult(), EntityCountResponse.class);
464 assertEquals(3170, entityCountResponse.getCount());
466 } catch (Exception exc) {
467 fail("Unexpected exception = " + exc.getLocalizedMessage());
474 * Test doGet() and doPost() for Unified Query Search success path
478 public void validateSummaryByEntityType_successPath() {
482 HttpServletHelper.assignRequestUri(commonRequest, "search/summarybyentitytype");
484 Map<String,String> payloadFields = new HashMap<String,String>();
485 payloadFields.put("hashId", "662d1b57c31df70d7ef57ec53c0ace81578ec77b6bc5de055a57c7547ec122dd");
486 payloadFields.put("groupby", "orchestration-status");
488 HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), NodeUtils.convertObjectToJson(payloadFields, false));
491 * In this test we don't want to mock the vnf search service, only it's collaborator
492 * interactions with a REST endpoint.
494 /* vnfSearchService = new VnfSearchService();
495 vnfSearchService.setSearch(searchAdapter);
496 searchWrapper.setVnfSearch(vnfSearchService);
499 * The first network response to mock is the one to elastic search to get the suggestion entity by hash id
501 * http://localhost:9200/entityautosuggestindex-localhost/_search
502 * {"query":{"term":{"_id":"2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d"}}}
505 /* AutoSuggestElasticSearchResponse elasticResponse = new AutoSuggestElasticSearchResponse();
507 elasticResponse.setTook(1);
509 elasticResponse.setTimedOut(false);
510 elasticResponse.addShard("total", "5");
511 elasticResponse.addShard("successful", "5");
512 elasticResponse.addShard("failed", "0");
514 AutoSuggestElasticHitEntity elasticHit = new AutoSuggestElasticHitEntity();
515 elasticHit.setIndex("entityautosuggestindex-localhost");
516 elasticHit.setType("default");
517 elasticHit.setId("2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d");
518 elasticHit.setScore("1");
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);
527 AutoSuggestDocumentEntity autoSuggestDoc = new AutoSuggestDocumentEntity();
528 autoSuggestDoc.setFields(suggestDocFields);
530 elasticHit.setSource(autoSuggestDoc);
532 AutoSuggestElasticHitsEntity hits = new AutoSuggestElasticHitsEntity();
533 hits.addHit(elasticHit);
535 elasticResponse.setHits(hits);
538 OperationResult mockedSearchResponse = new OperationResult();
539 mockedSearchResponse.setResultCode(200);
541 mockedSearchResponse.setResult(NodeUtils.convertObjectToJson(elasticResponse, false));
545 * The second response is the aggregation API dip to elastic search
548 ElasticSearchAggegrationResponse aggResponse = new ElasticSearchAggegrationResponse();
550 aggResponse.setTook(20);
551 aggResponse.setTimedOut(false);
553 aggResponse.addShard("total","5");
554 aggResponse.addShard("successful","5");
555 aggResponse.addShard("failed","0");
557 ElasticHitsEntity hitsEntity = new ElasticHitsEntity();
559 hitsEntity.setTotal(3170);
560 hitsEntity.setMaxScore(0);
562 aggResponse.setHits(hitsEntity);
564 ElasticSearchAggregation defaultAggregation = new ElasticSearchAggregation();
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));
584 aggResponse.addAggregation("default", defaultAggregation);
586 OperationResult searchResponseForAggregation = new OperationResult();
587 searchResponseForAggregation.setResultCode(200);
589 searchResponseForAggregation.setResult(NodeUtils.convertObjectToJson(aggResponse, false));
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);
597 * Testing the doGet() operation will hit the doPost() operation in the servlet as well
600 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
603 assertEquals(200, result.getResultCode());
606 //{"shards":{"total":"5","failed":"0","successful":"5"},"count":3170}
608 GroupByAggregationResponseEntity groupByResponse = mapper.readValue(result.getResult(), GroupByAggregationResponseEntity.class);
610 assertEquals(2828, groupByResponse.getAggEntity().getTotalChartHits());
611 assertEquals(15, groupByResponse.getAggEntity().getBuckets().size());
613 } catch (Exception exc) {
614 fail("Unexpected exception = " + exc.getLocalizedMessage());
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\"}]}";
623 HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilters");
624 HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
626 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
628 assertEquals(expectedResponse, result.getResult().trim());
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";
637 String requestBody = getResourceFileContents(requestBodyFilePath);
638 String expectedResponse = getResourceFileContents(expectedResponseFilePath);
640 HttpServletHelper.assignRequestUri(commonRequest, "search/filterAggregation");
641 HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
643 OperationResult operationResult = new OperationResult();
644 operationResult.setResult(getResourceFileContents(operationResultFilePath));
646 vnfSearchService = new VnfSearchService();
647 vnfSearchService.setSearch(searchAdapter);
648 searchWrapper.setVnfSearch(vnfSearchService);
650 Mockito.when(searchAdapter.doPost(anyString(), anyString(), anyString())).thenReturn(operationResult);
652 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
654 assertEquals(expectedResponse.trim(), result.getResult().trim());
658 public void validateFilterAggregation_emptyRequestFilterArray() throws IOException {
659 String requestBodyFilePath = "filters/filterAggregationEndpoint_emptyRequestFilterArray_requestBody.json";
660 String expectedResponseFilePath = "filters/filterAggregationEndpoint_emptyRequestFilterArray_expectedResponse.json";
662 String requestBody = getResourceFileContents(requestBodyFilePath);
663 String expectedResponse = getResourceFileContents(expectedResponseFilePath);
665 HttpServletHelper.assignRequestUri(commonRequest, "search/filterAggregation");
666 HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
668 vnfSearchService = new VnfSearchService();
669 vnfSearchService.setSearch(searchAdapter);
670 searchWrapper.setVnfSearch(vnfSearchService);
672 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
674 assertEquals(expectedResponse.trim(), result.getResult().trim());
678 public void validateFilterAggregation_emptyRequestBody() throws IOException {
679 String expectedResponseFilePath = "filters/filterAggregationEndpoint_emptyRequestBody_expectedResponse.json";
681 String expectedResponse = getResourceFileContents(expectedResponseFilePath);
683 HttpServletHelper.assignRequestUri(commonRequest, "search/filterAggregation");
684 HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), "{}");
686 vnfSearchService = new VnfSearchService();
687 vnfSearchService.setSearch(searchAdapter);
688 searchWrapper.setVnfSearch(vnfSearchService);
690 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
692 assertEquals(expectedResponse.trim(), result.getResult().trim());
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\"}]}";
700 HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilters");
701 HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
703 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
705 assertEquals(expectedResponse, result.getResult().trim());
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\"}]}]}";
713 HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilterValues");
714 HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
716 FilteredSearchHelper filteredSearchHelper = Mockito.mock(FilteredSearchHelper.class);
717 searchWrapper.setFilteredSearchHelper(filteredSearchHelper);
719 UiFilterValueEntity uiFilterValueEntity = new UiFilterValueEntity(null, "created", "created");
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);
728 UiFiltersEntity uiFiltersEntity = new UiFiltersEntity();
729 uiFiltersEntity.addFilter(uiFilterEntity);
731 Mockito.when(filteredSearchHelper.doFilterEnumeration(Mockito.anyList()))
732 .thenReturn(uiFiltersEntity);
734 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
736 assertEquals(expectedResponse, result.getResult().trim());
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\"}]}]}";
744 HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilterValues");
745 HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
747 FilteredSearchHelper filteredSearchHelper = Mockito.mock(FilteredSearchHelper.class);
748 searchWrapper.setFilteredSearchHelper(filteredSearchHelper);
750 UiFiltersEntity uiFiltersEntity = new UiFiltersEntity();
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);
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);
770 Mockito.when(filteredSearchHelper.doFilterEnumeration(Mockito.anyList()))
771 .thenReturn(uiFiltersEntity);
773 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
775 assertEquals(expectedResponse, result.getResult().trim());
779 public void validateHandleDiscoverSearchFilterValues_invalidId() throws IOException {
780 String requestBody = "{ \"filterIdList\" : [ { \"filterId\" : \"999\" } ] }";
781 String expectedResponse = "{\"filters\":[]}";
783 HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilterValues");
784 HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
786 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
788 assertEquals(expectedResponse, result.getResult().trim());
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\"}]}]}";
796 HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilterValues");
797 HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody);
799 FilteredSearchHelper filteredSearchHelper = Mockito.mock(FilteredSearchHelper.class);
800 searchWrapper.setFilteredSearchHelper(filteredSearchHelper);
802 UiFilterValueEntity uiFilterValueEntity = new UiFilterValueEntity(null, "created", "created");
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);
811 UiFiltersEntity uiFiltersEntity = new UiFiltersEntity();
812 uiFiltersEntity.addFilter(uiFilterEntity);
814 Mockito.when(filteredSearchHelper.doFilterEnumeration(Mockito.anyList()))
815 .thenReturn(uiFiltersEntity);
817 OperationResult result = doEvaluation(true, commonRequest, commonResponse);
819 assertEquals(expectedResponse, result.getResult().trim());
823 * Builds the resource entity descriptor.
825 * @param entityType the entity type
826 * @param attributeNames the attribute names
827 * @param searchableAttributes the searchable attributes
828 * @return the oxm entity descriptor
830 /* @SuppressWarnings("unchecked")
831 private OxmEntityDescriptor buildResourceEntityDescriptor(String entityType,
832 String attributeNames, String searchableAttributes) {
833 OxmEntityDescriptor descriptor = new OxmEntityDescriptor();
834 descriptor.setEntityName(entityType);
836 if (attributeNames != null) {
837 descriptor.setPrimaryKeyAttributeName(Arrays.asList(attributeNames.split(",")));
840 if (searchableAttributes != null) {
841 descriptor.setSearchableAttributes(Arrays.asList(searchableAttributes.split(",")));
848 * Initialize entity descriptors.
850 /*private void initializeEntityDescriptors() {
851 descriptors.put("customer",
852 buildResourceEntityDescriptor("customer", "service-instance-id", "f1,f2,f3"));
856 * Builds the view and inspect search request.
858 * @param maxResults the max results
859 * @param queryStr the query str
861 * @throws JsonProcessingException the json processing exception
863 /* public String buildViewAndInspectSearchRequest(Integer maxResults, String queryStr)
864 throws JsonProcessingException {
867 * { "maxResults" : "10", "searchStr" : "<search bar text>" }
870 ObjectNode rootNode = mapper.createObjectNode();
872 if (maxResults != null) {
873 rootNode.put("maxResults", maxResults);
876 if (queryStr != null) {
877 rootNode.put("queryStr", queryStr);
880 return NodeUtils.convertObjectToJson(rootNode, true);
884 public String getResourceFileContents(String filePath) {
885 StringBuilder result = new StringBuilder("");
887 ClassLoader classLoader = getClass().getClassLoader();
888 File file = new File(classLoader.getResource(filePath).getFile());
890 try (Scanner scanner = new Scanner(file)) {
891 while (scanner.hasNextLine()) {
892 String line = scanner.nextLine();
893 result.append(line).append("\n");
898 } catch (IOException e) {
902 return result.toString();
909 * @param doGet the do get
914 private OperationResult doEvaluationTestMDC(boolean doGet, HttpServletRequest req, HttpServletResponse res) {
917 * Test method invocation
920 SearchServlet searchServlet = new SearchServlet();
922 searchServlet.init();
923 } catch (ServletException e) {
924 // TODO Auto-generated catch block
927 ArgumentCaptor<Integer> responseCodeCaptor = ArgumentCaptor.forClass(Integer.class);
931 searchServlet.doGet(req, res);
933 searchServlet.doPost(req, res);
935 } catch (ServletException exc) {
936 fail(ExceptionHelper.extractStackTraceElements(5, exc));
937 } catch (IOException exc) {
938 fail(ExceptionHelper.extractStackTraceElements(5, exc));
941 responseStringWriter.flush();
942 Mockito.verify(commonResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
944 OperationResult result = new OperationResult();
946 result.setResultCode(responseCodeCaptor.getValue());
947 result.setResult(responseStringWriter.toString());
956 * @param doGet the do get
961 private OperationResult doEvaluation(boolean doGet, HttpServletRequest req, HttpServletResponse res) {
964 * Test method invocation
966 /* ArgumentCaptor<Integer> responseCodeCaptor = ArgumentCaptor.forClass(Integer.class);
970 searchWrapper.doGet(req, res);
972 searchWrapper.doPost(req, res);
974 } catch (ServletException exc) {
975 fail(ExceptionHelper.extractStackTraceElements(5, exc));
976 } catch (IOException exc) {
977 fail(ExceptionHelper.extractStackTraceElements(5, exc));
980 responseStringWriter.flush();
981 Mockito.verify(commonResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
983 OperationResult result = new OperationResult();
985 result.setResultCode(responseCodeCaptor.getValue());
986 result.setResult(responseStringWriter.toString());