package org.codelibs.riverweb.app.service; import static org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner.newConfigs; import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.UUID; import javax.annotation.Resource; import org.codelibs.core.io.FileUtil; import org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner; import org.codelibs.fess.crawler.client.EsClient; import org.dbflute.utflute.lastadi.ContainerTestCase; import org.elasticsearch.common.settings.Settings.Builder; import org.elasticsearch.script.ScriptService.ScriptType; public class ScriptServiceTest extends ContainerTestCase { @Resource protected ScriptService scriptService; @Resource protected EsClient esClient; public void test_javascript_inline() throws Exception { String lang = "javascript"; String script = "'test';"; ScriptType scriptType = ScriptType.INLINE; Map<String, Object> localVars = new HashMap<>(); assertEquals("test", scriptService.execute(lang, script, scriptType, localVars)); script = "print('test');"; assertNull(scriptService.execute(lang, script, scriptType, localVars)); localVars.put("testVar", "aaa"); script = "testVar;"; assertEquals("aaa", scriptService.execute(lang, script, scriptType, localVars)); } public void test_javascript_file() throws Exception { File tempFile = File.createTempFile("temp", ".txt"); tempFile.deleteOnExit(); FileUtil.writeBytes(tempFile.getAbsolutePath(), "'test';".getBytes()); String lang = "javascript"; String script = tempFile.getAbsolutePath(); ScriptType scriptType = ScriptType.FILE; Map<String, Object> localVars = new HashMap<>(); assertEquals("test", scriptService.execute(lang, script, scriptType, localVars)); FileUtil.writeBytes(tempFile.getAbsolutePath(), "print('test');".getBytes()); assertNull(scriptService.execute(lang, script, scriptType, localVars)); localVars.put("testVar", "aaa"); FileUtil.writeBytes(tempFile.getAbsolutePath(), "testVar;".getBytes()); assertEquals("aaa", scriptService.execute(lang, script, scriptType, localVars)); } public void test_javascript_indexed() throws Exception { // create runner instance String clusterName = "es-river-web-" + UUID.randomUUID().toString(); ElasticsearchClusterRunner runner = new ElasticsearchClusterRunner(); runner.onBuild(new ElasticsearchClusterRunner.Builder() { @Override public void build(final int number, final Builder settingsBuilder) { settingsBuilder.put("http.cors.enabled", true); settingsBuilder.put("http.cors.allow-origin", "*"); settingsBuilder.put("index.number_of_shards", 3); settingsBuilder.put("index.number_of_replicas", 0); settingsBuilder.putArray("discovery.zen.ping.unicast.hosts", "localhost:9301-9310"); settingsBuilder.put("index.unassigned.node_left.delayed_timeout", "0"); } }).build(newConfigs().clusterName(clusterName).numOfNode(1)); // wait for yellow status runner.ensureYellow(); try { esClient.setClusterName(clusterName); esClient.setAddresses(new String[] { "localhost:" + runner.node().settings().get("transport.tcp.port") }); esClient.connect(); Map<String, Object> localVars = new HashMap<>(); String lang = "javascript"; ScriptType scriptType = ScriptType.INDEXED; String script = "script1"; runner.insert(ScriptService.SCRIPT_INDEX, lang, script, "{\"script\":\"'test';\"}"); assertEquals("test", scriptService.execute(lang, script, scriptType, localVars)); script = "script2"; runner.insert(ScriptService.SCRIPT_INDEX, lang, script, "{\"script\":\"print('test');\"}"); assertNull(scriptService.execute(lang, script, scriptType, localVars)); localVars.put("testVar", "aaa"); script = "script3"; runner.insert(ScriptService.SCRIPT_INDEX, lang, script, "{\"script\":\"testVar;\"}"); assertEquals("aaa", scriptService.execute(lang, script, scriptType, localVars)); } finally { // close runner runner.close(); // delete all files runner.clean(); } } }