mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-13 08:25:26 +00:00
Move ValueCountTests to core
This script moves ValueCountTests from plugins back to core by using a mock script engine instead of Groovy.
This commit is contained in:
parent
18c9eba40a
commit
7d6b0fc481
@ -16,21 +16,22 @@
|
|||||||
* specific language governing permissions and limitations
|
* specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.messy.tests;
|
package org.elasticsearch.search.aggregations.metrics;
|
||||||
|
|
||||||
|
import org.apache.lucene.index.LeafReaderContext;
|
||||||
|
import org.apache.lucene.search.Scorer;
|
||||||
import org.elasticsearch.action.search.SearchResponse;
|
import org.elasticsearch.action.search.SearchResponse;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.script.Script;
|
import org.elasticsearch.script.*;
|
||||||
import org.elasticsearch.script.ScriptService.ScriptType;
|
import org.elasticsearch.script.ScriptService.ScriptType;
|
||||||
import org.elasticsearch.script.groovy.GroovyPlugin;
|
|
||||||
import org.elasticsearch.search.aggregations.bucket.global.Global;
|
import org.elasticsearch.search.aggregations.bucket.global.Global;
|
||||||
import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount;
|
import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount;
|
||||||
|
import org.elasticsearch.search.lookup.LeafSearchLookup;
|
||||||
|
import org.elasticsearch.search.lookup.SearchLookup;
|
||||||
import org.elasticsearch.test.ESIntegTestCase;
|
import org.elasticsearch.test.ESIntegTestCase;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
||||||
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
|
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
|
||||||
@ -44,13 +45,7 @@ import static org.hamcrest.Matchers.notNullValue;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ESIntegTestCase.SuiteScopeTestCase
|
@ESIntegTestCase.SuiteScopeTestCase
|
||||||
public class ValueCountTests extends ESIntegTestCase {
|
public class ValueCountIT extends ESIntegTestCase {
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Collection<Class<? extends Plugin>> nodePlugins() {
|
|
||||||
return Collections.singleton(GroovyPlugin.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setupSuiteScopeCluster() throws Exception {
|
public void setupSuiteScopeCluster() throws Exception {
|
||||||
createIndex("idx");
|
createIndex("idx");
|
||||||
@ -68,6 +63,11 @@ public class ValueCountTests extends ESIntegTestCase {
|
|||||||
ensureSearchable();
|
ensureSearchable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Collection<Class<? extends Plugin>> nodePlugins() {
|
||||||
|
return Collections.singletonList(FieldValueScriptPlugin.class);
|
||||||
|
}
|
||||||
|
|
||||||
public void testUnmapped() throws Exception {
|
public void testUnmapped() throws Exception {
|
||||||
SearchResponse searchResponse = client().prepareSearch("idx_unmapped")
|
SearchResponse searchResponse = client().prepareSearch("idx_unmapped")
|
||||||
.setQuery(matchAllQuery())
|
.setQuery(matchAllQuery())
|
||||||
@ -148,7 +148,7 @@ public class ValueCountTests extends ESIntegTestCase {
|
|||||||
|
|
||||||
public void testSingleValuedScript() throws Exception {
|
public void testSingleValuedScript() throws Exception {
|
||||||
SearchResponse searchResponse = client().prepareSearch("idx").setQuery(matchAllQuery())
|
SearchResponse searchResponse = client().prepareSearch("idx").setQuery(matchAllQuery())
|
||||||
.addAggregation(count("count").script(new Script("doc['value'].value"))).execute().actionGet();
|
.addAggregation(count("count").script(new Script("value", ScriptType.INLINE, FieldValueScriptEngine.NAME, null))).execute().actionGet();
|
||||||
|
|
||||||
assertHitCount(searchResponse, 10);
|
assertHitCount(searchResponse, 10);
|
||||||
|
|
||||||
@ -160,7 +160,7 @@ public class ValueCountTests extends ESIntegTestCase {
|
|||||||
|
|
||||||
public void testMultiValuedScript() throws Exception {
|
public void testMultiValuedScript() throws Exception {
|
||||||
SearchResponse searchResponse = client().prepareSearch("idx").setQuery(matchAllQuery())
|
SearchResponse searchResponse = client().prepareSearch("idx").setQuery(matchAllQuery())
|
||||||
.addAggregation(count("count").script(new Script("doc['values'].values"))).execute().actionGet();
|
.addAggregation(count("count").script(new Script("values", ScriptType.INLINE, FieldValueScriptEngine.NAME, null))).execute().actionGet();
|
||||||
|
|
||||||
assertHitCount(searchResponse, 10);
|
assertHitCount(searchResponse, 10);
|
||||||
|
|
||||||
@ -171,10 +171,9 @@ public class ValueCountTests extends ESIntegTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testSingleValuedScriptWithParams() throws Exception {
|
public void testSingleValuedScriptWithParams() throws Exception {
|
||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = Collections.singletonMap("s", "value");
|
||||||
params.put("s", "value");
|
|
||||||
SearchResponse searchResponse = client().prepareSearch("idx").setQuery(matchAllQuery())
|
SearchResponse searchResponse = client().prepareSearch("idx").setQuery(matchAllQuery())
|
||||||
.addAggregation(count("count").script(new Script("doc[s].value", ScriptType.INLINE, null, params))).execute().actionGet();
|
.addAggregation(count("count").script(new Script("", ScriptType.INLINE, FieldValueScriptEngine.NAME, params))).execute().actionGet();
|
||||||
|
|
||||||
assertHitCount(searchResponse, 10);
|
assertHitCount(searchResponse, 10);
|
||||||
|
|
||||||
@ -185,10 +184,9 @@ public class ValueCountTests extends ESIntegTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testMultiValuedScriptWithParams() throws Exception {
|
public void testMultiValuedScriptWithParams() throws Exception {
|
||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = Collections.singletonMap("s", "values");
|
||||||
params.put("s", "values");
|
|
||||||
SearchResponse searchResponse = client().prepareSearch("idx").setQuery(matchAllQuery())
|
SearchResponse searchResponse = client().prepareSearch("idx").setQuery(matchAllQuery())
|
||||||
.addAggregation(count("count").script(new Script("doc[s].values", ScriptType.INLINE, null, params))).execute().actionGet();
|
.addAggregation(count("count").script(new Script("", ScriptType.INLINE, FieldValueScriptEngine.NAME, params))).execute().actionGet();
|
||||||
|
|
||||||
assertHitCount(searchResponse, 10);
|
assertHitCount(searchResponse, 10);
|
||||||
|
|
||||||
@ -197,4 +195,139 @@ public class ValueCountTests extends ESIntegTestCase {
|
|||||||
assertThat(valueCount.getName(), equalTo("count"));
|
assertThat(valueCount.getName(), equalTo("count"));
|
||||||
assertThat(valueCount.getValue(), equalTo(20l));
|
assertThat(valueCount.getValue(), equalTo(20l));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mock plugin for the {@link FieldValueScriptEngine}
|
||||||
|
*/
|
||||||
|
public static class FieldValueScriptPlugin extends Plugin {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String name() {
|
||||||
|
return FieldValueScriptEngine.NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String description() {
|
||||||
|
return "Mock script engine for " + ValueCountIT.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onModule(ScriptModule module) {
|
||||||
|
module.addScriptEngine(FieldValueScriptEngine.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This mock script returns the field value. If the parameter map contains a parameter "s", the corresponding is used as field name.
|
||||||
|
*/
|
||||||
|
public static class FieldValueScriptEngine implements ScriptEngineService {
|
||||||
|
|
||||||
|
public static final String NAME = "field_value";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() throws IOException {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] types() {
|
||||||
|
return new String[] { NAME };
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] extensions() {
|
||||||
|
return types();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean sandboxed() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object compile(String script) {
|
||||||
|
return script;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExecutableScript executable(CompiledScript compiledScript, Map<String, Object> params) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public SearchScript search(CompiledScript compiledScript, SearchLookup lookup, Map<String, Object> vars) {
|
||||||
|
final String fieldNameParam;
|
||||||
|
if (vars == null || vars.containsKey("s") == false) {
|
||||||
|
fieldNameParam = null;
|
||||||
|
} else {
|
||||||
|
fieldNameParam = (String) vars.get("s");
|
||||||
|
}
|
||||||
|
|
||||||
|
return new SearchScript() {
|
||||||
|
private Map<String, Object> vars = new HashMap<>(2);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LeafSearchScript getLeafSearchScript(LeafReaderContext context) throws IOException {
|
||||||
|
|
||||||
|
final LeafSearchLookup leafLookup = lookup.getLeafSearchLookup(context);
|
||||||
|
|
||||||
|
return new LeafSearchScript() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object unwrap(Object value) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setNextVar(String name, Object value) {
|
||||||
|
vars.put(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object run() {
|
||||||
|
String fieldName = (fieldNameParam != null) ? fieldNameParam : (String) compiledScript.compiled();
|
||||||
|
return leafLookup.doc().get(fieldName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setScorer(Scorer scorer) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSource(Map<String, Object> source) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDocument(int doc) {
|
||||||
|
if (leafLookup != null) {
|
||||||
|
leafLookup.setDocument(doc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long runAsLong() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float runAsFloat() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double runAsDouble() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needsScores() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void scriptRemoved(CompiledScript script) {
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -80,7 +80,6 @@
|
|||||||
renamed: core/src/test/java/org/elasticsearch/search/aggregations/metrics/TDigestPercentilesIT.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/messy/tests/TDigestPercentilesTests.java
|
renamed: core/src/test/java/org/elasticsearch/search/aggregations/metrics/TDigestPercentilesIT.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/messy/tests/TDigestPercentilesTests.java
|
||||||
renamed: core/src/test/java/org/elasticsearch/search/aggregations/bucket/TopHitsIT.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/messy/tests/TopHitsTests.java
|
renamed: core/src/test/java/org/elasticsearch/search/aggregations/bucket/TopHitsIT.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/messy/tests/TopHitsTests.java
|
||||||
renamed: core/src/test/java/org/elasticsearch/index/mapper/TransformOnIndexMapperIT.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/messy/tests/TransformOnIndexMapperTests.java
|
renamed: core/src/test/java/org/elasticsearch/index/mapper/TransformOnIndexMapperIT.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/messy/tests/TransformOnIndexMapperTests.java
|
||||||
renamed: core/src/test/java/org/elasticsearch/search/aggregations/metrics/ValueCountIT.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/messy/tests/ValueCountTests.java
|
|
||||||
renamed: core/src/main/java/org/elasticsearch/script/groovy/GroovyScriptCompilationException.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/script/groovy/GroovyRestIT.java
|
renamed: core/src/main/java/org/elasticsearch/script/groovy/GroovyScriptCompilationException.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/script/groovy/GroovyRestIT.java
|
||||||
renamed: core/src/test/java/org/elasticsearch/script/GroovyScriptIT.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/script/groovy/GroovyScriptTests.java
|
renamed: core/src/test/java/org/elasticsearch/script/GroovyScriptIT.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/script/groovy/GroovyScriptTests.java
|
||||||
renamed: core/src/test/java/org/elasticsearch/script/GroovySecurityIT.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/script/groovy/GroovySecurityTests.java
|
renamed: core/src/test/java/org/elasticsearch/script/GroovySecurityIT.java -> plugins/lang-groovy/src/test/java/org/elasticsearch/script/groovy/GroovySecurityTests.java
|
||||||
|
Loading…
x
Reference in New Issue
Block a user