|
@@ -30,6 +30,7 @@ import java.io.IOException;
|
|
|
import java.nio.file.Files;
|
|
|
import java.nio.file.Path;
|
|
|
import java.util.Arrays;
|
|
|
+import java.util.Collection;
|
|
|
import java.util.List;
|
|
|
import java.util.Locale;
|
|
|
|
|
@@ -151,4 +152,90 @@ public class PluginsServiceTests extends ESTestCase {
|
|
|
assertThat(e, hasToString(containsString(expected)));
|
|
|
}
|
|
|
|
|
|
+ public void testLoadPluginWithNoPublicConstructor() {
|
|
|
+ class NoPublicConstructorPlugin extends Plugin {
|
|
|
+
|
|
|
+ private NoPublicConstructorPlugin() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ final Path home = createTempDir();
|
|
|
+ final Settings settings = Settings.builder().put(Environment.PATH_HOME_SETTING.getKey(), home).build();
|
|
|
+ final IllegalStateException e =
|
|
|
+ expectThrows(IllegalStateException.class, () -> newPluginsService(settings, NoPublicConstructorPlugin.class));
|
|
|
+ assertThat(e, hasToString(containsString("no public constructor")));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testLoadPluginWithMultiplePublicConstructors() {
|
|
|
+ class MultiplePublicConstructorsPlugin extends Plugin {
|
|
|
+
|
|
|
+ @SuppressWarnings("unused")
|
|
|
+ public MultiplePublicConstructorsPlugin() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @SuppressWarnings("unused")
|
|
|
+ public MultiplePublicConstructorsPlugin(final Settings settings) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ final Path home = createTempDir();
|
|
|
+ final Settings settings = Settings.builder().put(Environment.PATH_HOME_SETTING.getKey(), home).build();
|
|
|
+ final IllegalStateException e =
|
|
|
+ expectThrows(IllegalStateException.class, () -> newPluginsService(settings, MultiplePublicConstructorsPlugin.class));
|
|
|
+ assertThat(e, hasToString(containsString("no unique public constructor")));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testLoadPluginWithNoPublicConstructorOfCorrectSignature() {
|
|
|
+ class TooManyParametersPlugin extends Plugin {
|
|
|
+
|
|
|
+ @SuppressWarnings("unused")
|
|
|
+ public TooManyParametersPlugin(Settings settings, Path configPath, Object object) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ class TwoParametersFirstIncorrectType extends Plugin {
|
|
|
+
|
|
|
+ @SuppressWarnings("unused")
|
|
|
+ public TwoParametersFirstIncorrectType(Object object, Path configPath) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ class TwoParametersSecondIncorrectType extends Plugin {
|
|
|
+
|
|
|
+ @SuppressWarnings("unused")
|
|
|
+ public TwoParametersSecondIncorrectType(Settings settings, Object object) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ class OneParameterIncorrectType extends Plugin {
|
|
|
+
|
|
|
+ @SuppressWarnings("unused")
|
|
|
+ public OneParameterIncorrectType(Object object) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ final Collection<Class<? extends Plugin>> classes = Arrays.asList(
|
|
|
+ TooManyParametersPlugin.class,
|
|
|
+ TwoParametersFirstIncorrectType.class,
|
|
|
+ TwoParametersSecondIncorrectType.class,
|
|
|
+ OneParameterIncorrectType.class);
|
|
|
+ for (Class<? extends Plugin> pluginClass : classes) {
|
|
|
+ final Path home = createTempDir();
|
|
|
+ final Settings settings = Settings.builder().put(Environment.PATH_HOME_SETTING.getKey(), home).build();
|
|
|
+ final IllegalStateException e = expectThrows(IllegalStateException.class, () -> newPluginsService(settings, pluginClass));
|
|
|
+ assertThat(e, hasToString(containsString("no public constructor of correct signature")));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|