From e99caded8c0eacaadc54bb0878f5987dcaae3af7 Mon Sep 17 00:00:00 2001 From: Vedant Mehra Date: Tue, 11 Feb 2025 21:29:44 +0530 Subject: [PATCH] [MNT-24778] Added test case and overflow handling for int conversion --- .../alfresco/solr/SolrInformationServer.java | 5 +-- .../solr/SolrInformationServerTest.java | 36 +++++++++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java index a92e69d2d..b3e8e6018 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java @@ -3849,7 +3849,8 @@ public class SolrInformationServer implements InformationServer } @SuppressWarnings({ "unchecked", "rawtypes" }) - private NamedList getFacets(SolrQueryRequest request, String query, String field, int minCount, long maxCount) + NamedList getFacets(SolrQueryRequest request, String query, String field, int minCount, + long maxCount) { ModifiableSolrParams params = new ModifiableSolrParams(request.getParams()) @@ -3857,7 +3858,7 @@ public class SolrInformationServer implements InformationServer .set(CommonParams.ROWS, 0) .set(FacetParams.FACET, true) .set(FacetParams.FACET_FIELD, field) - .set(FacetParams.FACET_LIMIT, (int)maxCount) + .set(FacetParams.FACET_LIMIT, Math.toIntExact(Math.min(maxCount, Integer.MAX_VALUE))) .set(FacetParams.FACET_MINCOUNT, minCount); SolrQueryResponse response = cloud.getResponse(nativeRequestHandler, request, params); diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java index ca6d0999c..faf30db3e 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java @@ -27,7 +27,6 @@ package org.alfresco.solr; import static java.util.Optional.ofNullable; - import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.ANY; import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.ASSOC_REF; import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.BOOLEAN; @@ -71,11 +70,11 @@ import static org.mockito.Mockito.when; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; @@ -533,5 +532,38 @@ public class SolrInformationServerTest // verifies if the method was called verify(updateRequestProcessor).processAdd(any()); } + + @Test + public void testGetFacets() { + SimpleOrderedMap responseContent = new SimpleOrderedMap<>(); + // Create facet_fields (TXID) as SimpleOrderedMap with Integer as value type + SimpleOrderedMap txidFacet = new SimpleOrderedMap<>(); + txidFacet.add("1", 1); + txidFacet.add("2", 1); + txidFacet.add("3", 1); + // Create and populate the NamedList to simulate facet_counts + NamedList facetCounts = new NamedList<>(); + facetCounts.add("facet_queries", new SimpleOrderedMap<>()); + facetCounts.add("facet_fields", new SimpleOrderedMap<>()); + // Add TXID facet to facet_fields + SimpleOrderedMap facetFields = (SimpleOrderedMap) facetCounts.get("facet_fields"); + facetFields.add("TXID", txidFacet); + // Add the facet_counts to the main facetMap + responseContent.add("facet_counts", facetCounts); + // Set up the request handler to return the fake response. + doAnswer(invocation -> { + SolrQueryResponse solrQueryResponse = invocation.getArgument(1); + solrQueryResponse.setAllValues(responseContent); + return null; + }).when(handler).handleRequest(any(SolrQueryRequest.class), any(SolrQueryResponse.class)); + NamedList actualResult = infoServer.getFacets(request, "TXID:[1 TO 411]", "TXID", 1, 3); + assertEquals(new NamedList<>() { + { + add("1", 1); + add("2", 1); + add("3", 1); + } + }, actualResult); + } }