package com.stratio.cassandra.index.schema; import com.stratio.cassandra.index.schema.analysis.PreBuiltAnalyzers; import com.stratio.cassandra.index.schema.mapping.ColumnMapper; import com.stratio.cassandra.index.schema.mapping.ColumnMapperInteger; import com.stratio.cassandra.index.schema.mapping.ColumnMapperString; import com.stratio.cassandra.index.schema.mapping.ColumnMapperText; import com.stratio.cassandra.util.JsonSerializer; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.en.EnglishAnalyzer; import org.apache.lucene.analysis.es.SpanishAnalyzer; import org.codehaus.jackson.map.JsonMappingException; import org.junit.Assert; import org.junit.Test; import java.io.IOException; import java.util.HashMap; import java.util.Map; /** * @author Andres de la Pena <adelapena@stratio.com> */ public class SchemaTest { @Test public void testGetMapper() { Map<String, ColumnMapper> columnMappers = new HashMap<>(); ColumnMapperString columnMapper1 = new ColumnMapperString(); ColumnMapperString columnMapper2 = new ColumnMapperString(); ColumnMapperString columnMapper3 = new ColumnMapperString(); columnMappers.put("a", columnMapper1); columnMappers.put("a.b", columnMapper2); columnMappers.put("a.b.c", columnMapper3); Schema schema = new Schema(columnMappers, null, null); Assert.assertEquals(columnMapper1, schema.getMapper("a")); Assert.assertEquals(columnMapper2, schema.getMapper("a.b")); Assert.assertEquals(columnMapper3, schema.getMapper("a.b.c")); Assert.assertEquals(columnMapper3, schema.getMapper("a.b.c.d")); Assert.assertNotSame(columnMapper1, schema.getMapper("a.b.c.d")); schema.close(); } @Test public void testGetDefaultAnalyzer() { Map<String, ColumnMapper> columnMappers = new HashMap<>(); Schema schema = new Schema(columnMappers, null, "English"); Analyzer analyzer = schema.getDefaultAnalyzer(); Assert.assertEquals(EnglishAnalyzer.class, analyzer.getClass()); schema.close(); } @Test public void testGetDefaultAnalyzerNotSpecified() { Map<String, ColumnMapper> columnMappers = new HashMap<>(); Schema schema = new Schema(columnMappers, null, null); Analyzer analyzer = schema.getDefaultAnalyzer(); Assert.assertEquals(PreBuiltAnalyzers.DEFAULT.get(), analyzer); schema.close(); } @Test public void testParseJSON() throws IOException { String json = "{" + " analyzers:{" + " spanish_analyzer : {type:\"classpath\", " + " class:\"org.apache.lucene.analysis.es.SpanishAnalyzer\"}," + " snowball_analyzer : {type:\"snowball\", " + " language:\"Spanish\", " + " stopwords : \"el,la,lo,loas,las,a,ante,bajo,cabe,con,contra\"}" + " }," + " default_analyzer : \"spanish_analyzer\"," + " fields : {" + " id : {type : \"integer\"}," + " spanish_text : {type:\"text\", analyzer:\"spanish_analyzer\"}," + " snowball_text : {type:\"text\", analyzer:\"snowball_analyzer\"}" + " }" + " }'"; Schema schema = JsonSerializer.fromString(json, Schema.class); Analyzer defaultAnalyzer = schema.getDefaultAnalyzer(); Assert.assertTrue(defaultAnalyzer instanceof SpanishAnalyzer); Analyzer spanishAnalyzer = schema.getAnalyzer("spanish_analyzer"); Assert.assertTrue(spanishAnalyzer instanceof SpanishAnalyzer); ColumnMapper idMapper = schema.getMapper("id"); Assert.assertTrue(idMapper instanceof ColumnMapperInteger); ColumnMapper spanishMapper = schema.getMapper("spanish_text"); Assert.assertTrue(spanishMapper instanceof ColumnMapperText); Assert.assertEquals("spanish_analyzer", spanishMapper.analyzer()); ColumnMapper snowballMapper = schema.getMapper("snowball_text"); Assert.assertTrue(snowballMapper instanceof ColumnMapperText); Assert.assertEquals("snowball_analyzer", snowballMapper.analyzer()); schema.close(); } @Test public void testParseJSONWithNullAnalyzers() throws IOException { String json = "{" + " default_analyzer : \"org.apache.lucene.analysis.en.EnglishAnalyzer\"," + " fields : {" + " id : {type : \"integer\"}," + " spanish_text : {" + " type:\"text\", " + " analyzer:\"org.apache.lucene.analysis.es.SpanishAnalyzer\"}," + " snowball_text : {" + " type:\"text\", " + " analyzer:\"org.apache.lucene.analysis.en.EnglishAnalyzer\"}" + " }" + " }'"; Schema schema = JsonSerializer.fromString(json, Schema.class); Analyzer defaultAnalyzer = schema.getDefaultAnalyzer(); Assert.assertTrue(defaultAnalyzer instanceof EnglishAnalyzer); ColumnMapper idMapper = schema.getMapper("id"); Assert.assertTrue(idMapper instanceof ColumnMapperInteger); ColumnMapper spanishMapper = schema.getMapper("spanish_text"); Assert.assertTrue(spanishMapper instanceof ColumnMapperText); Assert.assertEquals(SpanishAnalyzer.class.getName(), spanishMapper.analyzer()); ColumnMapper snowballMapper = schema.getMapper("snowball_text"); Assert.assertTrue(snowballMapper instanceof ColumnMapperText); Assert.assertEquals(EnglishAnalyzer.class.getName(), snowballMapper.analyzer()); schema.close(); } @Test public void testParseJSONWithEmptyAnalyzers() throws IOException { String json = "{" + " analyzers:{}, " + " default_analyzer : \"org.apache.lucene.analysis.en.EnglishAnalyzer\"," + " fields : {" + " id : {type : \"integer\"}," + " spanish_text : {type:\"text\", " + " analyzer:\"org.apache.lucene.analysis.es.SpanishAnalyzer\"}," + " snowball_text : {type:\"text\", " + " analyzer:\"org.apache.lucene.analysis.en.EnglishAnalyzer\"}" + " }" + " }'"; Schema schema = JsonSerializer.fromString(json, Schema.class); Analyzer defaultAnalyzer = schema.getDefaultAnalyzer(); Assert.assertTrue(defaultAnalyzer instanceof EnglishAnalyzer); ColumnMapper idMapper = schema.getMapper("id"); Assert.assertEquals(ColumnMapperInteger.class, idMapper.getClass()); ColumnMapper spanishMapper = schema.getMapper("spanish_text"); Assert.assertTrue(spanishMapper instanceof ColumnMapperText); Assert.assertEquals(SpanishAnalyzer.class.getName(), spanishMapper.analyzer()); ColumnMapper snowballMapper = schema.getMapper("snowball_text"); Assert.assertTrue(snowballMapper instanceof ColumnMapperText); Assert.assertEquals(EnglishAnalyzer.class.getName(), snowballMapper.analyzer()); schema.close(); } @Test public void testParseJSONWithNullDefaultAnalyzer() throws IOException { String json = "{" + " analyzers:{" + " spanish_analyzer : {" + " type:\"classpath\", " + " class:\"org.apache.lucene.analysis.es.SpanishAnalyzer\"}," + " snowball_analyzer : {" + " type:\"snowball\", " + " language:\"Spanish\", " + " stopwords : \"el,la,lo,lo,as,las,a,ante,con,contra\"}" + " }," + " fields : { id : {type : \"integer\"} }" + " }'"; Schema schema = JsonSerializer.fromString(json, Schema.class); Analyzer defaultAnalyzer = schema.getDefaultAnalyzer(); Assert.assertEquals(PreBuiltAnalyzers.DEFAULT.get(), defaultAnalyzer); Analyzer spanishAnalyzer = schema.getAnalyzer("spanish_analyzer"); Assert.assertTrue(spanishAnalyzer instanceof SpanishAnalyzer); schema.close(); } @Test(expected = JsonMappingException.class) public void testParseJSONWithFailingDefaultAnalyzer() throws IOException { String json = "{default_analyzer : \"xyz\", fields : { id : {type : \"integer\"} } }'"; JsonSerializer.fromString(json, Schema.class); } }