SEARCH-2396: Create new test for several iterations on re-indexing the ANAME and APATH fields.

This commit is contained in:
Angel Borroy
2020-08-31 12:24:38 +02:00
parent 0f8b014eb9
commit 502fe23f94

View File

@@ -26,8 +26,42 @@
package org.alfresco.solr; package org.alfresco.solr;
import java.util.Collection; import static java.util.Optional.ofNullable;
import java.util.Collections; 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;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.CATEGORY;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.CHILD_ASSOC_REF;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.CONTENT;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.DOUBLE;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.ENCRYPTED;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.FLOAT;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.INT;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.LOCALE;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.LONG;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.MLTEXT;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.NODE_REF;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.PATH;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.PERIOD;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.QNAME;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.TEXT;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_DAY_FIELD_SUFFIX;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_HOUR_FIELD_SUFFIX;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_MINUTE_FIELD_SUFFIX;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_MONTH_FIELD_SUFFIX;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_QUARTER_FIELD_SUFFIX;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_SECOND_FIELD_SUFFIX;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_YEAR_FIELD_SUFFIX;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -55,41 +89,6 @@ import org.mockito.Mock;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoJUnitRunner;
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;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.CATEGORY;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.CHILD_ASSOC_REF;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.CONTENT;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.DOUBLE;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.ENCRYPTED;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.FLOAT;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.INT;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.LOCALE;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.LONG;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.MLTEXT;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.NODE_REF;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.PATH;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.PERIOD;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.QNAME;
import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.TEXT;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_DAY_FIELD_SUFFIX;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_HOUR_FIELD_SUFFIX;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_MINUTE_FIELD_SUFFIX;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_MONTH_FIELD_SUFFIX;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_SECOND_FIELD_SUFFIX;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_QUARTER_FIELD_SUFFIX;
import static org.alfresco.solr.SolrInformationServer.UNIT_OF_TIME_YEAR_FIELD_SUFFIX;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/** /**
* Unit tests for the {@link SolrInformationServer} class. * Unit tests for the {@link SolrInformationServer} class.
* *
@@ -355,10 +354,21 @@ public class SolrInformationServerTest
nodeMetaData.setAncestorPaths(List.of("/1/2/4/7/10", "/1/2/5/8/10", "/1/2/6/9/10")); nodeMetaData.setAncestorPaths(List.of("/1/2/4/7/10", "/1/2/5/8/10", "/1/2/6/9/10"));
nodeMetaData.setPaths(List.of()); nodeMetaData.setPaths(List.of());
// Repeat the operation 2 times to verify updating and existing document removes previous List<String> expectedANames = Stream.of("0/10",
// information in ANAME and APATH fields "1/7/10", "1/8/10", "1/9/10",
IntStream.range(0, 2).forEach(i -> "2/4/7/10", "2/5/8/10", "2/6/9/10",
{ "3/2/4/7/10", "3/2/5/8/10", "3/2/6/9/10",
"4/1/2/4/7/10", "4/1/2/5/8/10", "4/1/2/6/9/10",
"F/1/2/4/7/10", "F/1/2/5/8/10", "F/1/2/6/9/10")
.collect(Collectors.toCollection(ArrayList::new));
List<String> expectedAPaths = Stream.of("0/1",
"1/1/2",
"2/1/2/4", "2/1/2/5", "2/1/2/6",
"3/1/2/4/7", "3/1/2/5/8", "3/1/2/6/9",
"4/1/2/4/7/10", "4/1/2/5/8/10", "4/1/2/6/9/10",
"F/1/2/4/7/10", "F/1/2/5/8/10", "F/1/2/6/9/10")
.collect(Collectors.toCollection(ArrayList::new));
infoServer.updatePathRelatedFields(nodeMetaData, doc); infoServer.updatePathRelatedFields(nodeMetaData, doc);
@@ -369,13 +379,7 @@ public class SolrInformationServerTest
.sorted() .sorted()
.collect(Collectors.toList()); .collect(Collectors.toList());
assertEquals("Expecting only 1 aname for level 0 path: 0/10", assertEquals(expectedANames, anames);
anames.stream().filter(aname -> aname.startsWith("0/")).count(), 1);
assertEquals(anames.stream().filter(aname -> aname.startsWith("1/")).count(), 3);
assertEquals(anames.stream().filter(aname -> aname.startsWith("2/")).count(), 3);
assertEquals(anames.stream().filter(aname -> aname.startsWith("3/")).count(), 3);
assertEquals(anames.stream().filter(aname -> aname.startsWith("4/")).count(), 3);
assertEquals(anames.stream().filter(aname -> aname.startsWith("F/")).count(), 3);
List<String> apaths = doc.getFieldValues(QueryConstants.FIELD_APATH).stream() List<String> apaths = doc.getFieldValues(QueryConstants.FIELD_APATH).stream()
.map(aname -> aname.toString()) .map(aname -> aname.toString())
@@ -384,14 +388,31 @@ public class SolrInformationServerTest
.sorted() .sorted()
.collect(Collectors.toList()); .collect(Collectors.toList());
assertEquals("Expecting only 1 aname for level 0 path: 0/1", assertEquals(expectedAPaths, apaths);
apaths.stream().filter(apath -> apath.startsWith("0/")).count(), 1);
assertEquals("Expecting only 1 aname for level 0 path: 1/1/2",
apaths.stream().filter(apath -> apath.startsWith("1/")).count(), 1); }
assertEquals(apaths.stream().filter(apath -> apath.startsWith("2/")).count(), 3);
assertEquals(apaths.stream().filter(apath -> apath.startsWith("3/")).count(), 3); /**
assertEquals(apaths.stream().filter(apath -> apath.startsWith("4/")).count(), 3); * Repeat the indexing operation 2 times to verify that updating and existing document
assertEquals(apaths.stream().filter(apath -> apath.startsWith("F/")).count(), 3); * removes previous information in ANAME and APATH fields
*/
@Test
public void testPathsFieldStorageIterations()
{
SolrInputDocument doc = new SolrInputDocument();
NodeMetaData nodeMetaData = new NodeMetaData();
nodeMetaData.setAncestorPaths(List.of("/1/2/4/7/10", "/1/2/5/8/10", "/1/2/6/9/10"));
nodeMetaData.setPaths(List.of());
IntStream.range(0, 2).forEach(i ->
{
infoServer.updatePathRelatedFields(nodeMetaData, doc);
assertEquals(doc.getFieldValues(QueryConstants.FIELD_ANAME).size(), 16);
assertEquals(doc.getFieldValues(QueryConstants.FIELD_APATH).size(), 14);
}); });