/* * ============LICENSE_START======================================================= * SPARKY (inventory UI service) * ================================================================================ * Copyright © 2017 AT&T Intellectual Property. * Copyright © 2017 Amdocs * All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= * * ECOMP and OpenECOMP are trademarks * and service marks of AT&T Intellectual Property. */ package org.openecomp.sparky.viewandinspect; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Matchers.anyString; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.security.SecureRandom; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import org.openecomp.sparky.config.oxm.OxmEntityDescriptor; import org.openecomp.sparky.config.oxm.OxmModelLoader; import org.openecomp.sparky.dal.elasticsearch.SearchAdapter; import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestDocumentEntity; import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestDocumentEntityFields; import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestElasticHitEntity; import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestElasticHitsEntity; import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestElasticSearchResponse; import org.openecomp.sparky.dal.elasticsearch.entity.BucketEntity; import org.openecomp.sparky.dal.elasticsearch.entity.ElasticHitsEntity; import org.openecomp.sparky.dal.elasticsearch.entity.ElasticSearchAggegrationResponse; import org.openecomp.sparky.dal.elasticsearch.entity.ElasticSearchAggregation; import org.openecomp.sparky.dal.elasticsearch.entity.ElasticSearchCountResponse; import org.openecomp.sparky.dal.elasticsearch.entity.PayloadEntity; import org.openecomp.sparky.dal.rest.OperationResult; import org.openecomp.sparky.dal.sas.config.SearchServiceConfig; import org.openecomp.sparky.dal.sas.entity.EntityCountResponse; import org.openecomp.sparky.dal.sas.entity.GroupByAggregationResponseEntity; import org.openecomp.sparky.dal.sas.entity.SearchAbstractionEntityBuilder; import org.openecomp.sparky.search.VnfSearchService; import org.openecomp.sparky.search.config.SuggestionConfig; import org.openecomp.sparky.suggestivesearch.SuggestionEntity; import org.openecomp.sparky.util.ExceptionHelper; import org.openecomp.sparky.util.HttpServletHelper; import org.openecomp.sparky.util.NodeUtils; import org.openecomp.sparky.viewandinspect.entity.QuerySearchEntity; import org.openecomp.sparky.viewandinspect.entity.SearchResponse; import org.openecomp.sparky.viewandinspect.services.SearchServiceWrapper; import org.openecomp.sparky.viewandinspect.servlet.SearchServlet; import org.slf4j.MDC; import org.openecomp.cl.mdc.MdcContext; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.net.MediaType; /** * The Class SearchServletTest. */ public class SearchServletTest { private static final String VNF_ROUTE = "vnf"; private static final String VIEW_INSPECT_ROUTE = "viewInspect"; private HttpServletRequest commonRequest = null; private HttpServletResponse commonResponse = null; private PrintWriter printWriter = null; private StringWriter responseStringWriter = null; private SearchServiceWrapper searchWrapper = null; private SearchAdapter searchAdapter = null; private VnfSearchService vnfSearchService = null; private ObjectMapper mapper = null; private SecureRandom rand = null; private OxmModelLoader loader; private Map descriptors = null; private SuggestionConfig suggestionConfig = null; private SearchServiceConfig esConfig = null; /** * Inits the. * * @throws Exception the exception */ @Before public void init() throws Exception { commonRequest = HttpServletHelper.getMockHttpServletRequest(); responseStringWriter = new StringWriter(); printWriter = new PrintWriter(responseStringWriter); commonResponse = HttpServletHelper.getMockHttpServletResponse(printWriter); mapper = new ObjectMapper(); // permit serialization of objects with no members mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); rand = new SecureRandom(); loader = Mockito.mock(OxmModelLoader.class); descriptors = new HashMap(); esConfig = new SearchServiceConfig(); suggestionConfig = SuggestionConfig.getConfig(); // Use SearchServiceWrapper and VnfSearchService for suggestionConfig Map svcs = new HashMap(); svcs.put("autosuggestIndexname", "SearchServiceWrapper"); svcs.put("indexName", "VnfSearchService"); suggestionConfig.setSearchIndexToSearchService(svcs); esConfig.setIndexName("esi-localhost"); esConfig.setType("default"); searchAdapter = Mockito.mock(SearchAdapter.class); vnfSearchService = Mockito.mock(VnfSearchService.class); initializeEntityDescriptors(); searchWrapper = new SearchServiceWrapper(); searchWrapper.setSasConfig(esConfig); searchWrapper.setSearch(searchAdapter); searchWrapper.setVnfSearch(vnfSearchService); searchWrapper.setSuggestionConfig(suggestionConfig); searchWrapper.setOxmModelLoader(loader); } @Test public void validateAccessors() { assertNotNull("Vnf Search Service should not be null", searchWrapper.getVnfSearch()); } @Test public void validateInitializer() { try { assertNotNull("Oxm Model loader should not be null", searchWrapper.getOxmModelLoader()); assertNotNull("SearchAbstractionConfig should not be null", searchWrapper.getSasConfig()); assertNotNull("SearchAdapter should not be null", searchWrapper.getSearch()); assertNotNull("Suggestion Config should not be null", searchWrapper.getSuggestionConfig()); assertNotNull("VnfSearchService should not be null", searchWrapper.getVnfSearch()); searchWrapper.setOxmModelLoader(null); searchWrapper.setSasConfig(null); searchWrapper.setSearch(null); searchWrapper.setSuggestionConfig(null); searchWrapper.setVnfSearch(null); assertNull("Oxm Model loader should be null", searchWrapper.getOxmModelLoader()); assertNull("SearchAbstractionConfig should be null", searchWrapper.getSasConfig()); assertNull("SearchAdapter should be null", searchWrapper.getSearch()); assertNull("Suggestion Config should be null", searchWrapper.getSuggestionConfig()); assertNull("VnfSearchService should be null", searchWrapper.getVnfSearch()); } catch (Exception exc) { fail("Servlet Initialization Failed with error = " + exc.getMessage()); } } /** * Test doGet() and doPost() for a non-existent end-point. A test objective would be * to either return a 404 Not Found. */ @Test public void validateMdcContextLoggingVariablesWhenExplicitlySet() { final String transactionId = "1234"; final String serviceName = "AAI_UI"; final String partnerName = "SparkyApp"; HttpServletHelper.assignRequestHeader(commonRequest, "X-TransactionId", transactionId); HttpServletHelper.assignRequestHeader(commonRequest, "X-FromAppId", partnerName); HttpServletHelper.assignRequestUri(commonRequest, "search/this/path/does/not/exist/"); try { /* * Testing the doGet() operation will hit the doPost() operation in the servlet as well */ OperationResult result = doEvaluationTestMDC(true, commonRequest, commonResponse); assertEquals(transactionId,MDC.get(MdcContext.MDC_REQUEST_ID)); assertEquals(serviceName,MDC.get(MdcContext.MDC_SERVICE_NAME)); assertEquals(partnerName,MDC.get(MdcContext.MDC_PARTNER_NAME)); } catch (Exception exc) { exc.printStackTrace(); fail("Unexpected exception = " + exc.getLocalizedMessage()); } } /** * Test doGet() and doPost() for a non-existent end-point. A test objective would be * to either return a 404 Not Found. */ @Test public void validateMdcContextLoggingVariablesWhenNotExplicitlySet() { /*final String transactionId = "1234"; final String serviceName = "AAI-UI"; final String partnerName = "SparkyApp"; HttpServletHelper.assignRequestHeader(commonRequest, "X-TransactionId", transactionId); HttpServletHelper.assignRequestHeader(commonRequest, "X-FromAppId", serviceName);*/ HttpServletHelper.assignRequestUri(commonRequest, "search/this/path/does/not/exist/"); try { /* * Testing the doGet() operation will hit the doPost() operation in the servlet as well */ OperationResult result = doEvaluationTestMDC(true, commonRequest, commonResponse); assertNotNull(MDC.get(MdcContext.MDC_REQUEST_ID)); assertNotNull(MDC.get(MdcContext.MDC_SERVICE_NAME)); assertNotNull(MDC.get(MdcContext.MDC_PARTNER_NAME)); } catch (Exception exc) { exc.printStackTrace(); fail("Unexpected exception = " + exc.getLocalizedMessage()); } } /** * Test doGet() and doPost() for a non-existent end-point. */ @Test public void validateViewAndInspectSearchError_invalidRequestUri() { HttpServletHelper.assignRequestUri(commonRequest, "search/this/path/does/not/exist/"); try { /* * Testing the doGet() operation will hit the doPost() operation in the servlet as well */ OperationResult result = doEvaluation(true, commonRequest, commonResponse); assertEquals(404, result.getResultCode()); assertTrue(result.getResult().contains("Ignored request-uri")); } catch (Exception exc) { exc.printStackTrace(); fail("Unexpected exception = " + exc.getLocalizedMessage()); } } /** * Test doGet() and doPost() for Unified Query Search success path */ @Test public void validateQuerySearch_successPath() { try { QuerySearchEntity searchEntity = new QuerySearchEntity(); searchEntity.setMaxResults("10"); searchEntity.setQueryStr("the quick brown fox"); HttpServletHelper.assignRequestUri(commonRequest, "search/querysearch"); HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), NodeUtils.convertObjectToJson(searchEntity, false)); // set search-abstraction-response that we expect to get back from real system, but stubbed through a mock // to fulfill collaborator behavior OperationResult mockedEntitySearchResponse = new OperationResult(); mockedEntitySearchResponse.setResultCode(200); mockedEntitySearchResponse.setResult(NodeUtils.convertObjectToJson( SearchAbstractionEntityBuilder.getSuccessfulEntitySearchResponse(), false)); // TODO: make parameters expect certain values to lock in invocation attempt against a specific input sequence Mockito.when(searchAdapter.doPost(anyString(), anyString(), anyString())) .thenReturn(mockedEntitySearchResponse); List autoSuggestions = new ArrayList(); autoSuggestions.add(new SuggestionEntity("vnf","1234", "VNFs")); autoSuggestions.add(new SuggestionEntity("vnf","1111", "Created VNFs")); autoSuggestions.add(new SuggestionEntity("vnf","1122", "ACTIVE VNFs")); autoSuggestions.add(new SuggestionEntity("vnf","2233", "ACTIVE and Error VNFs")); autoSuggestions.add(new SuggestionEntity("vnf","3344", "ACTIVE and NOT ORCHESTRATED VNFs")); autoSuggestions.add(new SuggestionEntity("vnf","4455", "ACTIVE and Running VNFs")); autoSuggestions.add(new SuggestionEntity("vnf","5566", "Activated VNFs")); autoSuggestions.add(new SuggestionEntity("vnf","6677", "CAPPED VNFs")); autoSuggestions.add(new SuggestionEntity("vnf","7788", "CAPPED and Created VNFs")); Mockito.when(vnfSearchService.getSuggestionsResults(Mockito.anyObject(), Mockito.anyInt())) .thenReturn(autoSuggestions); /* * Testing the doGet() operation will hit the doPost() operation in the servlet as well */ OperationResult result = doEvaluation(true, commonRequest, commonResponse); assertEquals(200, result.getResultCode()); SearchResponse searchResponse = mapper.readValue(result.getResult(), SearchResponse.class); assertEquals(10, searchResponse.getTotalFound()); int numVnf = 0; int numViewInspect = 0; for ( SuggestionEntity suggestion : searchResponse.getSuggestions()) { if ( VNF_ROUTE.equals(suggestion.getRoute())) { numVnf++; } else if ( VIEW_INSPECT_ROUTE.equals(suggestion.getRoute())) { numViewInspect++; } } assertEquals(5, numVnf); assertEquals(5, numViewInspect); //assertTrue(result.getResult().contains("Ignored request-uri")); } catch (Exception exc) { fail("Unexpected exception = " + exc.getLocalizedMessage()); } } /** * Test doGet() and doPost() for Unified Query Search success path */ @Test public void validateSummaryByEntityTypeCount_successPath() { try { HttpServletHelper.assignRequestUri(commonRequest, "search/summarybyentitytype/count"); Map payloadFields = new HashMap(); payloadFields.put("hashId", "662d1b57c31df70d7ef57ec53c0ace81578ec77b6bc5de055a57c7547ec122dd"); payloadFields.put("groupby", "orchestration-status"); HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), NodeUtils.convertObjectToJson(payloadFields, false)); /* * In this test we don't want to mock the vnf search service, only it's collaborator * interactions with a REST endpoint. */ vnfSearchService = new VnfSearchService(); vnfSearchService.setSearch(searchAdapter); searchWrapper.setVnfSearch(vnfSearchService); /* * The first network response to mock is the one to elastic search to get the suggestion entity by hash id * * http://localhost:9200/entityautosuggestindex-localhost/_search * {"query":{"term":{"_id":"2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d"}}} */ AutoSuggestElasticSearchResponse elasticResponse = new AutoSuggestElasticSearchResponse(); elasticResponse.setTook(1); elasticResponse.setTimedOut(false); elasticResponse.addShard("total", "5"); elasticResponse.addShard("successful", "5"); elasticResponse.addShard("failed", "0"); AutoSuggestElasticHitEntity elasticHit = new AutoSuggestElasticHitEntity(); elasticHit.setIndex("entityautosuggestindex-localhost"); elasticHit.setType("default"); elasticHit.setId("2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d"); elasticHit.setScore("1"); AutoSuggestDocumentEntityFields suggestDocFields = new AutoSuggestDocumentEntityFields(); suggestDocFields.addInput("VNFs"); suggestDocFields.addInput("generic-vnfs"); suggestDocFields.setOutput("VNFs"); suggestDocFields.setPayload(new PayloadEntity()); suggestDocFields.setWeight(100); AutoSuggestDocumentEntity autoSuggestDoc = new AutoSuggestDocumentEntity(); autoSuggestDoc.setFields(suggestDocFields); elasticHit.setSource(autoSuggestDoc); AutoSuggestElasticHitsEntity hits = new AutoSuggestElasticHitsEntity(); hits.addHit(elasticHit); elasticResponse.setHits(hits); OperationResult mockedSearchResponse = new OperationResult(); mockedSearchResponse.setResultCode(200); mockedSearchResponse.setResult(NodeUtils.convertObjectToJson(elasticResponse, false)); /* * The second response is the count API dip to elastic search */ ElasticSearchCountResponse countResponse = new ElasticSearchCountResponse(); countResponse.setCount(3170); countResponse.addShard("total", "5"); countResponse.addShard("successful", "5"); countResponse.addShard("failed", "0"); OperationResult searchResponseForCount = new OperationResult(); searchResponseForCount.setResultCode(200); searchResponseForCount.setResult(NodeUtils.convertObjectToJson(countResponse, false)); // TODO: make parameters expect certain values to lock in invocation attempt against a specific input sequence Mockito.when(searchAdapter.doPost(anyString(), anyString(), anyString())) .thenReturn(mockedSearchResponse).thenReturn(searchResponseForCount); /* * Testing the doGet() operation will hit the doPost() operation in the servlet as well */ OperationResult result = doEvaluation(true, commonRequest, commonResponse); assertEquals(200, result.getResultCode()); // //{"shards":{"total":"5","failed":"0","successful":"5"},"count":3170} EntityCountResponse entityCountResponse = mapper.readValue(result.getResult(), EntityCountResponse.class); assertEquals(3170, entityCountResponse.getCount()); } catch (Exception exc) { fail("Unexpected exception = " + exc.getLocalizedMessage()); } } /** * Test doGet() and doPost() for Unified Query Search success path */ @Test public void validateSummaryByEntityType_successPath() { try { HttpServletHelper.assignRequestUri(commonRequest, "search/summarybyentitytype"); Map payloadFields = new HashMap(); payloadFields.put("hashId", "662d1b57c31df70d7ef57ec53c0ace81578ec77b6bc5de055a57c7547ec122dd"); payloadFields.put("groupby", "orchestration-status"); HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), NodeUtils.convertObjectToJson(payloadFields, false)); /* * In this test we don't want to mock the vnf search service, only it's collaborator * interactions with a REST endpoint. */ vnfSearchService = new VnfSearchService(); vnfSearchService.setSearch(searchAdapter); searchWrapper.setVnfSearch(vnfSearchService); /* * The first network response to mock is the one to elastic search to get the suggestion entity by hash id * * http://localhost:9200/entityautosuggestindex-localhost/_search * {"query":{"term":{"_id":"2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d"}}} */ AutoSuggestElasticSearchResponse elasticResponse = new AutoSuggestElasticSearchResponse(); elasticResponse.setTook(1); elasticResponse.setTimedOut(false); elasticResponse.addShard("total", "5"); elasticResponse.addShard("successful", "5"); elasticResponse.addShard("failed", "0"); AutoSuggestElasticHitEntity elasticHit = new AutoSuggestElasticHitEntity(); elasticHit.setIndex("entityautosuggestindex-localhost"); elasticHit.setType("default"); elasticHit.setId("2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d"); elasticHit.setScore("1"); AutoSuggestDocumentEntityFields suggestDocFields = new AutoSuggestDocumentEntityFields(); suggestDocFields.addInput("VNFs"); suggestDocFields.addInput("generic-vnfs"); suggestDocFields.setOutput("VNFs"); suggestDocFields.setPayload(new PayloadEntity()); suggestDocFields.setWeight(100); AutoSuggestDocumentEntity autoSuggestDoc = new AutoSuggestDocumentEntity(); autoSuggestDoc.setFields(suggestDocFields); elasticHit.setSource(autoSuggestDoc); AutoSuggestElasticHitsEntity hits = new AutoSuggestElasticHitsEntity(); hits.addHit(elasticHit); elasticResponse.setHits(hits); OperationResult mockedSearchResponse = new OperationResult(); mockedSearchResponse.setResultCode(200); mockedSearchResponse.setResult(NodeUtils.convertObjectToJson(elasticResponse, false)); /* * The second response is the aggregation API dip to elastic search */ ElasticSearchAggegrationResponse aggResponse = new ElasticSearchAggegrationResponse(); aggResponse.setTook(20); aggResponse.setTimedOut(false); aggResponse.addShard("total","5"); aggResponse.addShard("successful","5"); aggResponse.addShard("failed","0"); ElasticHitsEntity hitsEntity = new ElasticHitsEntity(); hitsEntity.setTotal(3170); hitsEntity.setMaxScore(0); aggResponse.setHits(hitsEntity); ElasticSearchAggregation defaultAggregation = new ElasticSearchAggregation(); defaultAggregation.setDocCountErrorUpperBound(0); defaultAggregation.setSumOtherDocCount(0); defaultAggregation.addBucket(new BucketEntity("created",1876)); defaultAggregation.addBucket(new BucketEntity("Created",649)); defaultAggregation.addBucket(new BucketEntity("Activated",158)); defaultAggregation.addBucket(new BucketEntity("active",59)); defaultAggregation.addBucket(new BucketEntity("NOT ORCHESTRATED",42)); defaultAggregation.addBucket(new BucketEntity("Pending-Create",10)); defaultAggregation.addBucket(new BucketEntity("Running",9)); defaultAggregation.addBucket(new BucketEntity("Configured",7)); defaultAggregation.addBucket(new BucketEntity("pending-create",7)); defaultAggregation.addBucket(new BucketEntity("Error",3)); defaultAggregation.addBucket(new BucketEntity("planned",3)); defaultAggregation.addBucket(new BucketEntity("PLANNED",2)); defaultAggregation.addBucket(new BucketEntity("ERROR",1)); defaultAggregation.addBucket(new BucketEntity("RUNNING",1)); defaultAggregation.addBucket(new BucketEntity("example-orchestration-status-val-6176",1)); aggResponse.addAggregation("default", defaultAggregation); OperationResult searchResponseForAggregation = new OperationResult(); searchResponseForAggregation.setResultCode(200); searchResponseForAggregation.setResult(NodeUtils.convertObjectToJson(aggResponse, false)); // TODO: make parameters expect certain values to lock in invocation attempt against a specific input sequence Mockito.when(searchAdapter.doPost(anyString(), anyString(), anyString())) .thenReturn(mockedSearchResponse).thenReturn(searchResponseForAggregation); /* * Testing the doGet() operation will hit the doPost() operation in the servlet as well */ OperationResult result = doEvaluation(true, commonRequest, commonResponse); assertEquals(200, result.getResultCode()); // //{"shards":{"total":"5","failed":"0","successful":"5"},"count":3170} GroupByAggregationResponseEntity groupByResponse = mapper.readValue(result.getResult(), GroupByAggregationResponseEntity.class); assertEquals(2828, groupByResponse.getAggEntity().getTotalChartHits()); assertEquals(15, groupByResponse.getAggEntity().getBuckets().size()); } catch (Exception exc) { fail("Unexpected exception = " + exc.getLocalizedMessage()); } } /** * Builds the resource entity descriptor. * * @param entityType the entity type * @param attributeNames the attribute names * @param searchableAttributes the searchable attributes * @return the oxm entity descriptor */ @SuppressWarnings("unchecked") private OxmEntityDescriptor buildResourceEntityDescriptor(String entityType, String attributeNames, String searchableAttributes) { OxmEntityDescriptor descriptor = new OxmEntityDescriptor(); descriptor.setEntityName(entityType); if (attributeNames != null) { descriptor.setPrimaryKeyAttributeName(Arrays.asList(attributeNames.split(","))); } if (searchableAttributes != null) { descriptor.setSearchableAttributes(Arrays.asList(searchableAttributes.split(","))); } return descriptor; } /** * Initialize entity descriptors. */ private void initializeEntityDescriptors() { descriptors.put("customer", buildResourceEntityDescriptor("customer", "service-instance-id", "f1,f2,f3")); } /** * Builds the view and inspect search request. * * @param maxResults the max results * @param queryStr the query str * @return the string * @throws JsonProcessingException the json processing exception */ public String buildViewAndInspectSearchRequest(Integer maxResults, String queryStr) throws JsonProcessingException { /* * { "maxResults" : "10", "searchStr" : "" } */ ObjectNode rootNode = mapper.createObjectNode(); if (maxResults != null) { rootNode.put("maxResults", maxResults); } if (queryStr != null) { rootNode.put("queryStr", queryStr); } return NodeUtils.convertObjectToJson(rootNode, true); } /** * Do evaluation. * * @param doGet the do get * @param req the req * @param res the res * @return the string */ private OperationResult doEvaluationTestMDC(boolean doGet, HttpServletRequest req, HttpServletResponse res) { /* * Test method invocation */ SearchServlet searchServlet = new SearchServlet(); try { searchServlet.init(); } catch (ServletException e) { // TODO Auto-generated catch block e.printStackTrace(); } ArgumentCaptor responseCodeCaptor = ArgumentCaptor.forClass(Integer.class); try { if (doGet) { searchServlet.doGet(req, res); } else { searchServlet.doPost(req, res); } } catch (ServletException exc) { fail(ExceptionHelper.extractStackTraceElements(5, exc)); } catch (IOException exc) { fail(ExceptionHelper.extractStackTraceElements(5, exc)); } responseStringWriter.flush(); Mockito.verify(commonResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture()); OperationResult result = new OperationResult(); result.setResultCode(responseCodeCaptor.getValue()); result.setResult(responseStringWriter.toString()); return result; } /** * Do evaluation. * * @param doGet the do get * @param req the req * @param res the res * @return the string */ private OperationResult doEvaluation(boolean doGet, HttpServletRequest req, HttpServletResponse res) { /* * Test method invocation */ ArgumentCaptor responseCodeCaptor = ArgumentCaptor.forClass(Integer.class); try { if (doGet) { searchWrapper.doGet(req, res); } else { searchWrapper.doPost(req, res); } } catch (ServletException exc) { fail(ExceptionHelper.extractStackTraceElements(5, exc)); } catch (IOException exc) { fail(ExceptionHelper.extractStackTraceElements(5, exc)); } responseStringWriter.flush(); Mockito.verify(commonResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture()); OperationResult result = new OperationResult(); result.setResultCode(responseCodeCaptor.getValue()); result.setResult(responseStringWriter.toString()); return result; } }