diff --git a/src/test/java/org/springframework/data/elasticsearch/Utils.java b/src/test/java/org/springframework/data/elasticsearch/Utils.java
index 81b34ea56..6d56a7c6f 100644
--- a/src/test/java/org/springframework/data/elasticsearch/Utils.java
+++ b/src/test/java/org/springframework/data/elasticsearch/Utils.java
@@ -31,7 +31,7 @@ public class Utils {
return (NodeClient) nodeBuilder().settings(Settings.builder()
.put("http.enabled", "false")
.put("path.data", "target/elasticsearchTestData")
- .put("path.home", "target/test-home-dir"))
+ .put("path.home", "test-home-dir"))
.clusterName(UUID.randomUUID().toString()).local(true).node()
.client();
}
diff --git a/src/test/resources/infrastructure.xml b/src/test/resources/infrastructure.xml
index 366d81583..53b807b3b 100644
--- a/src/test/resources/infrastructure.xml
+++ b/src/test/resources/infrastructure.xml
@@ -6,7 +6,7 @@
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
diff --git a/src/test/resources/org/springframework/data/elasticsearch/config/namespace.xml b/src/test/resources/org/springframework/data/elasticsearch/config/namespace.xml
index b9f598ed7..6d02237c9 100644
--- a/src/test/resources/org/springframework/data/elasticsearch/config/namespace.xml
+++ b/src/test/resources/org/springframework/data/elasticsearch/config/namespace.xml
@@ -7,7 +7,7 @@
+ path-data="target/elasticsearchTestData" path-home="test-home-dir"/>
diff --git a/test-home-dir/modules/lang-groovy/groovy-all-2.4.4-indy.jar b/test-home-dir/modules/lang-groovy/groovy-all-2.4.4-indy.jar
new file mode 100644
index 000000000..3154c33b8
Binary files /dev/null and b/test-home-dir/modules/lang-groovy/groovy-all-2.4.4-indy.jar differ
diff --git a/test-home-dir/modules/lang-groovy/lang-groovy-2.2.0.jar b/test-home-dir/modules/lang-groovy/lang-groovy-2.2.0.jar
new file mode 100644
index 000000000..08d9cc22f
Binary files /dev/null and b/test-home-dir/modules/lang-groovy/lang-groovy-2.2.0.jar differ
diff --git a/test-home-dir/modules/lang-groovy/plugin-descriptor.properties b/test-home-dir/modules/lang-groovy/plugin-descriptor.properties
new file mode 100644
index 000000000..6dfe2c18e
--- /dev/null
+++ b/test-home-dir/modules/lang-groovy/plugin-descriptor.properties
@@ -0,0 +1,80 @@
+# Elasticsearch plugin descriptor file
+# This file must exist as 'plugin-descriptor.properties' at
+# the root directory of all plugins.
+#
+# A plugin can be 'site', 'jvm', or both.
+#
+### example site plugin for "foo":
+#
+# foo.zip <-- zip file for the plugin, with this structure:
+# _site/ <-- the contents that will be served
+# plugin-descriptor.properties <-- example contents below:
+#
+# site=true
+# description=My cool plugin
+# version=1.0
+#
+### example jvm plugin for "foo"
+#
+# foo.zip <-- zip file for the plugin, with this structure:
+# .jar <-- classes, resources, dependencies
+# .jar <-- any number of jars
+# plugin-descriptor.properties <-- example contents below:
+#
+# jvm=true
+# classname=foo.bar.BazPlugin
+# description=My cool plugin
+# version=2.0.0-rc1
+# elasticsearch.version=2.0
+# java.version=1.7
+#
+### mandatory elements for all plugins:
+#
+# 'description': simple summary of the plugin
+description=Groovy scripting integration for Elasticsearch
+#
+# 'version': plugin's version
+version=2.2.0
+#
+# 'name': the plugin name
+name=lang-groovy
+
+### mandatory elements for site plugins:
+#
+# 'site': set to true to indicate contents of the _site/
+# directory in the root of the plugin should be served.
+site=false
+#
+### mandatory elements for jvm plugins :
+#
+# 'jvm': true if the 'classname' class should be loaded
+# from jar files in the root directory of the plugin.
+# Note that only jar files in the root directory are
+# added to the classpath for the plugin! If you need
+# other resources, package them into a resources jar.
+jvm=true
+#
+# 'classname': the name of the class to load, fully-qualified.
+classname=org.elasticsearch.script.groovy.GroovyPlugin
+#
+# 'java.version' version of java the code is built against
+# use the system property java.specification.version
+# version string must be a sequence of nonnegative decimal integers
+# separated by "."'s and may have leading zeros
+java.version=1.7
+#
+# 'elasticsearch.version' version of elasticsearch compiled against
+# You will have to release a new version of the plugin for each new
+# elasticsearch release. This version is checked when the plugin
+# is loaded so Elasticsearch will refuse to start in the presence of
+# plugins with the incorrect elasticsearch.version.
+elasticsearch.version=2.2.0
+#
+### deprecated elements for jvm plugins :
+#
+# 'isolated': true if the plugin should have its own classloader.
+# passing false is deprecated, and only intended to support plugins
+# that have hard dependencies against each other. If this is
+# not specified, then the plugin is isolated by default.
+isolated=true
+#
diff --git a/test-home-dir/modules/lang-groovy/plugin-security.policy b/test-home-dir/modules/lang-groovy/plugin-security.policy
new file mode 100644
index 000000000..48ed2c456
--- /dev/null
+++ b/test-home-dir/modules/lang-groovy/plugin-security.policy
@@ -0,0 +1,57 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+grant {
+ // needed to generate runtime classes
+ permission java.lang.RuntimePermission "createClassLoader";
+ // needed by IndyInterface
+ permission java.lang.RuntimePermission "getClassLoader";
+ // needed by groovy engine
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.reflect";
+ permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
+ // needed by GroovyScriptEngineService to close its classloader (why?)
+ permission java.lang.RuntimePermission "closeClassLoader";
+ // Allow executing groovy scripts with codesource of /untrusted
+ permission groovy.security.GroovyCodeSourcePermission "/untrusted";
+
+ // Standard set of classes
+ permission org.elasticsearch.script.ClassPermission "<>";
+ // groovy runtime (TODO: clean these up if possible)
+ permission org.elasticsearch.script.ClassPermission "groovy.grape.GrabAnnotationTransformation";
+ permission org.elasticsearch.script.ClassPermission "groovy.json.JsonOutput";
+ permission org.elasticsearch.script.ClassPermission "groovy.lang.Binding";
+ permission org.elasticsearch.script.ClassPermission "groovy.lang.GroovyObject";
+ permission org.elasticsearch.script.ClassPermission "groovy.lang.GString";
+ permission org.elasticsearch.script.ClassPermission "groovy.lang.Script";
+ permission org.elasticsearch.script.ClassPermission "groovy.util.GroovyCollections";
+ permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.ast.builder.AstBuilderTransformation";
+ permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.reflection.ClassInfo";
+ permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.runtime.GStringImpl";
+ permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.runtime.powerassert.ValueRecorder";
+ permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.runtime.powerassert.AssertionRenderer";
+ permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.runtime.ScriptBytecodeAdapter";
+ permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation";
+ permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.vmplugin.v7.IndyInterface";
+ permission org.elasticsearch.script.ClassPermission "sun.reflect.ConstructorAccessorImpl";
+
+ permission org.elasticsearch.script.ClassPermission "groovy.lang.Closure";
+ permission org.elasticsearch.script.ClassPermission "org.codehaus.groovy.runtime.GeneratedClosure";
+ permission org.elasticsearch.script.ClassPermission "groovy.lang.MetaClass";
+ permission org.elasticsearch.script.ClassPermission "groovy.lang.Range";
+};