|
@@ -91,6 +91,33 @@ public class ScriptedMetricAggContextsTests extends ScriptTestCase {
|
|
|
assertEquals(1.0, state.get("testField"));
|
|
|
}
|
|
|
|
|
|
+ public void testReturnSource() throws IOException {
|
|
|
+ ScriptedMetricAggContexts.MapScript.Factory factory = scriptEngine.compile("test",
|
|
|
+ "state._source = params._source", ScriptedMetricAggContexts.MapScript.CONTEXT, Collections.emptyMap());
|
|
|
+
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ Map<String, Object> state = new HashMap<>();
|
|
|
+
|
|
|
+ MemoryIndex index = new MemoryIndex();
|
|
|
+ // we don't need a real index, just need to construct a LeafReaderContext which cannot be mocked
|
|
|
+ LeafReaderContext leafReaderContext = index.createSearcher().getIndexReader().leaves().get(0);
|
|
|
+
|
|
|
+ SearchLookup lookup = mock(SearchLookup.class);
|
|
|
+ LeafSearchLookup leafLookup = mock(LeafSearchLookup.class);
|
|
|
+ when(lookup.getLeafSearchLookup(leafReaderContext)).thenReturn(leafLookup);
|
|
|
+ SourceLookup sourceLookup = mock(SourceLookup.class);
|
|
|
+ when(leafLookup.asMap()).thenReturn(Collections.singletonMap("_source", sourceLookup));
|
|
|
+ when(sourceLookup.loadSourceIfNeeded()).thenReturn(Collections.singletonMap("test", 1));
|
|
|
+ ScriptedMetricAggContexts.MapScript.LeafFactory leafFactory = factory.newFactory(params, state, lookup);
|
|
|
+ ScriptedMetricAggContexts.MapScript script = leafFactory.newInstance(leafReaderContext);
|
|
|
+
|
|
|
+ script.execute();
|
|
|
+
|
|
|
+ assertTrue(state.containsKey("_source"));
|
|
|
+ assertTrue(state.get("_source") instanceof Map && ((Map)state.get("_source")).containsKey("test"));
|
|
|
+ assertEquals(1, ((Map)state.get("_source")).get("test"));
|
|
|
+ }
|
|
|
+
|
|
|
public void testMapSourceAccess() throws IOException {
|
|
|
ScriptedMetricAggContexts.MapScript.Factory factory = scriptEngine.compile("test",
|
|
|
"state.testField = params._source.three", ScriptedMetricAggContexts.MapScript.CONTEXT, Collections.emptyMap());
|
|
@@ -107,13 +134,13 @@ public class ScriptedMetricAggContextsTests extends ScriptTestCase {
|
|
|
when(lookup.getLeafSearchLookup(leafReaderContext)).thenReturn(leafLookup);
|
|
|
SourceLookup sourceLookup = mock(SourceLookup.class);
|
|
|
when(leafLookup.asMap()).thenReturn(Collections.singletonMap("_source", sourceLookup));
|
|
|
- when(sourceLookup.get("three")).thenReturn(3);
|
|
|
+ when(sourceLookup.loadSourceIfNeeded()).thenReturn(Collections.singletonMap("three", 3));
|
|
|
ScriptedMetricAggContexts.MapScript.LeafFactory leafFactory = factory.newFactory(params, state, lookup);
|
|
|
ScriptedMetricAggContexts.MapScript script = leafFactory.newInstance(leafReaderContext);
|
|
|
|
|
|
script.execute();
|
|
|
|
|
|
- assert(state.containsKey("testField"));
|
|
|
+ assertTrue(state.containsKey("testField"));
|
|
|
assertEquals(3, state.get("testField"));
|
|
|
}
|
|
|
|